Warning: Geeky programmer content below.
While learning a new codebase, I was a little disturbed when I saw this:
enum IsVerifying {
IsVerifyingFalse,
IsVerifyingTrue
};
enum IsVerified {
IsVerifiedFalse,
IsVerifiedTrue
};
enum IsEnabled {
IsEnabledFalse,
IsEnabledTrue
};
enum IsActive {
IsActiveFalse,
IsActiveTrue
};
enum IsOnline {
IsOnlineFalse,
IsOnlineTrue
};
/* etc. (There are about a dozen more of these.) */
And there was a lot of verbose code for dealing with these types, such as
if (Verified()) {
verified = IsVerifiedTrue;
}
else {
verified = IsVerifiedFalse;
}
if (Enabled()) {
enabled = IsEnabledTrue;
}
else {
enabled = IsEnabledFalse;
}
/* etc. */
What's wrong with using plain-old-Boolean values false and true, or 0 and 1?
Well, after poking around the code more, I did find the reason that the original programmer did this. He has a lot of functions that take several flags as parameters, and something like this:
SetStates(IsVerifyingFalse,
IsVerifiedTrue,
IsEnabledTrue,
IsActiveFalse,
IsOnlineFalse);
is easier to understand than something like this:
SetStates(false, true, true, false, false);
But still, yyeeaagghh is the proper reaction to seeing something like this.