|
Uhm yeah, I think most developers are guilty of doing something like this at one time or another. It certainly isn't the end of the world. I've seen far worse than this in production code that is currently running around the world.
Phil
|
|
|
|
|
Both examples make me shudder. Why would you compare a boolean to True or False? It IS true or false.
|
|
|
|
|
Absolutely. Along the same lines, my pet peeve is
bool b;
if (condition)
{
b = true;
}
else
{
b = false;
}
what on earth is wrong with
bool b = condition;
Regards
- Roger
|
|
|
|
|
Roger Bamforth wrote: what on earth is wrong with
bool b = condition;
In general I completely agree with you. The only time I might use the "bad" way is for debugging purposes. If I only want a breakpoint to hit when 'condition' is false, then I will create an explicit if/else branch. Of course, after debugging I revert the code back to bool b = condition; (I'm usually too lazy to setup debugger conditions!)
|
|
|
|
|
Yep, done this myself. And debugger conditional breakpoints are actually quite a lot slower than IP traps.
|
|
|
|
|
Well, if the condition is to test the equality of two variables,
bool b;<br><br>if (x = y)<br>{<br> b = true;<br>}<br>else<br>{<br> b = false;<br>}<br>
will give you a compiler warning, and
bool b = (x = y);
will not. (Note the assignment vs equality test bug)
|
|
|
|
|
That's a good point and is actually something that had never occurred to me.
However, whether or not you get a warning depends upon the types of x, y and b is not as simple as it seems. It is probably also language and compiler dependant.
e.g in Visual C++
bool x = true;
bool y = true;
bool b = (x = y);
gives no warning, as you say, but
int x = true;
int y = true;
bool b = (x = y);
does generate a warning (forcing an int to be a bool) and
int x = true;
int y = true;
BOOL b = (x = y);
doesn't.
Regards
- Roger
|
|
|
|
|
Shouldn't it be:
bool b = (x == y);
----------
bool b = (x = y);
would set x to y and then b to x
---
The sum of the intelligence of the world is constant. The total number of people is always increasing.
|
|
|
|
|
It's also quite common. I often find myself starting with the first one, then after testing, stepping through, etc., I refactor to the second.
Kevin
|
|
|
|
|
I think it is just easier to read when you say say what you want it to equal.
If boolean = True instead of just saying
If boolean I just couldnt think of a good example but what I was getting at is really saying something like
If strType = "GOOD" OrElse strType = "COOL" Then
'Good Record
Else
blnError = True
End If instead of saying
If strType <> "GOOD" AndAlso strType <> "COOL" Then
blnError = True
End If
CleaKO
"I think you'll be okay here, they have a thin candy shell. 'Surprised you didn't know that." - Tommy Boy "Fill it up again! Fill it up again! Once it hits your lips, it's so good!" - Frank the Tank (Old School)
|
|
|
|
|
CleaKO wrote: think it is just easier to read when you say say what you want it to equal.
If boolean = True
instead of just saying
If boolean
Funny.
For me its just the opposite: The superfluous = True imposes the nagging feel in me, I have missed something while reading the code.
But then, the whole VB code gives me a screaming fit anyway.
Failure is not an option - it's built right in.
|
|
|
|
|
jhwurmbach wrote: But then, the whole VB code gives me a screaming fit anyway.
I know the feeling.
INTP
"Program testing can be used to show the presence of bugs, but never to show their absence."Edsger Dijkstra
|
|
|
|
|
jhwurmbach wrote: But then, the whole VB code gives me a screaming fit anyway.
But you see such style in the C-family languages too, though it's probably less common.
Kevin
|
|
|
|
|
Yeah, it's just the opposite for me too. Especially if you name your boolean properties or methods correctly.
If UserIsInRole(user, role) Then
Just the name of the function implies that it returns a True/False value.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
CleaKO wrote: If boolean = True
But then you may have trouble when the code is ported to C, so you really need:
If True = boolean
--| "Every tool is a hammer." |--
|
|
|
|
|
It is a good idea to place the constant value to the left of the equality symbol in any language that supports them, to catch syntax errors.
It just feels so unnatural to type it that way.
INTP
"Program testing can be used to show the presence of bugs, but never to show their absence."Edsger Dijkstra
|
|
|
|
|
You might still have trouble in C, if you run up against code that uses other non-zero values for "true"...
----
It appears that everybody is under the impression that I approve of the documentation. You probably also blame Ken Burns for supporting slavery.
--Raymond Chen on MSDN
|
|
|
|
|
If that's how you use booleans, you might as well just use an integer set to 1 or 0 or a string set to "Y" or "N" (or "True" or "False"). How about:
<br />
somethingIsWrong = (type <> "GOOD" AndAlso type <> "Cool")<br />
With a variable name that clearly expresses the condition represented by the boolean, the comparison to True or False becomes clearly redundant.
|
|
|
|
|
The reason for the first is that some people have a fixation about negative conditionals, such that they will try and avoid them at all costs - such as the cost you describe!
Kevin
|
|
|
|
|
boolean = True
but that's a boolean expression again, which could be true.. or false.
So to make absoultely clear you want b = true to be true (not false), you write
If (boolean = True) = True
lather, rinse, repeat
Developers, Developers, Developers, Developers, Developers, Developers, Velopers, Develprs, Developers! We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP Linkify!|Fold With Us!
|
|
|
|
|
I prefer
If ( isFlag ) Then Continue Succinct.
----
It appears that everybody is under the impression that I approve of the documentation. You probably also blame Ken Burns for supporting slavery.
--Raymond Chen on MSDN
|
|
|
|
|
If there is a complicated method and I want to indicate that I did indeed accomodate both possibilities I will, ocassionaly, leave a blank if. However, I almost never check a boolean variable against a boolean and instead prefer :
<br />
if(isFlagSet){<br />
<br />
}<br />
else if(!isFlagSet){<br />
...<br />
}<br />
else{<br />
}<br />
Just kidding with the File not found!
File Not Found
|
|
|
|
|
|
The code below is part of an eventhandler
Very informative and easy to debug
The worse part is that there are quite a few of these constructions in the application at hand. Shouldn't there be a law against such 'programmers'?
.....
try
{
int startNummer = Convert.ToInt32(dataGrid1[dataGrid1.CurrentRowIndex, 0]);
Hashtable ht = Logica.HaalEquipeIDBijStartnummer(editieID);
equipeID = (int) ht[startNummer];
if (!Logica.IsTijdControleIngevoerd(etappeID))
return;
}
catch
{
return;
}
....
Keep smiling,
Marco
|
|
|
|
|
It is in Dutch. I have no problem reading it, and I don't even speak the language (2 minutes at Babelfish will do it). Get a Dutch programmer to translate it for you. Or does program code always have to be in English?
|
|
|
|