Not keyword vs = False when checking for false boo

2020-08-13 05:43发布

问题:

When I'm using an If statement and I want to check if a boolean is false should I use the "Not" keyword or just = false, like so

If (Not myboolean) then 

vs

If (myboolean = False) then

Which is better practice and more readable?

回答1:

Definitely, use "Not". And for the alternately, use "If (myboolean)" instead of "If (myboolean = true)"

The works best if you give the boolean a readable name:

 if (node.HasChildren)


回答2:

Since there's no functional difference between either style, this is one of those things that just comes down to personal preference.

If you're working on a codebase where a standard has already been set, then stick to that.



回答3:

Use True and False to set variables, not to test them. This improves readability as described in the other answers, but it also improves portability, particularly when best practices aren't followed.

Some languages allow you to interchange bool and integer types. Consider the contrived example:

int differentInts(int i, int j)
{
   return i-j;  // Returns non-zero (true) if ints are different.
}

. . .
if (differentInts(4, 8) == TRUE)
   printf("Four and Eight are different!\n");
else
   printf("Four and Eight are equal!\n");

Horrible style, but I've seen worse sneak into production. On other people's watches, of course. :-)



回答4:

Definitely use "Not", consider reading it aloud.

If you read aloud:

If X is false Then Do Y Do Y

Versus

If Not X Then Do Y

I think you'll find the "Not" route is more natural. Especially if you pick good variable names or functions.

Code Complete has some good rules on variable names. http://cc2e.com/Page.aspx?hid=225 (login is probably required)



回答5:

! condition

In C and pre-STL C++, "!condition" means condition evaluates to a false truth value, whereas "condition == FALSE" meant that the value of condition had to equal what the system designed as FALSE. Since different implementations defined it in different ways, it was deemed better practice to use !condition.

UPDATE: As pointed out in the comment -- FALSE is always 0, it's TRUE that can be dangerous.



回答6:

Additionally to the consensus, when there is both a true case and a false case please use

if (condition)
    // true case
else
    // false case

rather than

if (not condition)
    // false case
else
    // true case

(But then I am never sure if python's x is not None is the true-case or the false case.)



回答7:

Something else: Omit the parentheses, they’re redundant in VB and as such, constitute syntactic garbage.

Also, I'm slightly bothered by how many people argue by giving technical examples in other languages that simply do not apply in VB. In VB, the only reasons to use If Not x instead of If x = False is readability and logic. Not that you’d need other reasons.

Completely different reasons apply in C(++), true. Even more true due to the existence of frameworks that really handle this differently. But misleading in the context of VB!



回答8:

It does not make any difference as long you are dealing with VB only, however if you happen to use C functions such as the Win32 API, definitely do not use "NOT" just "==False" when testing for false, but when testing for true do not use "==True" instead use "if(function())".

The reason for that is the difference between C and VB in how boolean is defined.

  1. In C true == 1 while in VB true == -1 (therefore you should not compare the output of a C function to true, as you are trying to compare -1 to 1)

  2. Not in Vb is a bitwise NOT (equal to C's ~ operator not the ! operator), and thus it negates each bit, and as a result negating 1 (true in C) will result in a non zero value which is true, NOT only works on VB true which is -1 (which in bit format is all one's according to the two's complement rule [111111111]) and negating all bits [0000000000] equals zero.

For a better understanding see my answer on Is there a VB.net equivalent for C#'s ! operator?



回答9:

Made a difference with these lines in vb 2010/12 With the top line, Option Strict had to be turned off.

If InStr(strLine, "=") = False Then _
If Not CBool(InStr(strLine, "=")) Then

Thanks for answering the question for me. (I'm learning)



标签: vb.net