检查false布尔条件时,not keyword vs = False

时间:2008-10-29 03:08:22

标签: vb.net

当我使用If语句并且我想检查布尔值是否为假时我应该使用“Not”关键字还是只是= false,就像这样

If (Not myboolean) then 

VS

If (myboolean = False) then

哪种做法更好,更具可读性?

9 个答案:

答案 0 :(得分:20)

当然,使用“不”。而对于交替使用“If(myboolean)”而不是“If(myboolean = true)”

如果你给布尔字一个可读的名字,那么效果最好:

 if (node.HasChildren)

答案 1 :(得分:7)

由于两种风格之间没有功能差异,因此这只是个人偏好的事情之一。

如果您正在处理已设置标准的代码库,那么请坚持下去。

答案 2 :(得分:2)

使用TrueFalse 设置变量,而不是测试它们。这提高了可读性,如其他答案中所述,但它也提高了可移植性,特别是在不遵循最佳实践的情况下。

某些语言允许您交换bool和整数类型。考虑一个人为的例子:

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");

可怕的风格,但我看到更糟糕的潜入生产。当然,在其他人的手表上。 : - )

答案 3 :(得分:1)

!条件

在C和pre-STL C ++中,“!condition”表示条件评估为虚假真值,而“condition == FALSE”表示条件值必须等于系统设计为FALSE的值。由于不同的实现以不同的方式定义它,因此使用!condition。

被认为是更好的做法

更新:正如评论中指出的那样 - FALSE始终为0,它是正确的,可能是危险的。

答案 4 :(得分:1)

绝对使用“不”,考虑大声朗读。

如果你大声朗读:

如果X为假,则执行Y.   做Y

对战

如果不是X则那么

我认为你会发现“不”路线更自然。特别是如果你选择好的变量名或函数。

Code Complete对变量名称有一些很好的规则。 http://cc2e.com/Page.aspx?hid=225(可能需要登录)

答案 5 :(得分:1)

除了共识之外,当存在真实案例和虚假案件时,请使用

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

而不是

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

(但是我不确定python的x is not None是真实案例还是虚假案例。)

答案 6 :(得分:1)

其他:省略括号,它们在VB中是多余的,因此构成语法垃圾。

另外,有些人因为在其他语言中使用不适用于的技术示例而争论不休。在VB中,使用If Not x而不是If x = False的唯一原因是可读性和逻辑性。并不是说你需要其他原因。

完全不同的理由适用于C(++),是的。更真实的是由于存在真正处理不同的框架。但是在VB的上下文中误导

答案 7 :(得分:0)

只要你只处理VB就没有任何区别,但是如果你碰巧使用的是Win32 API之类的C函数,那么在测试false时肯定不要使用“NOT”只是“== False”,但是当测试为true时不要使用“== True”而是使用“if(function())”。

原因是C和VB之间的差异在于如何定义布尔值。

  1. 在C中= = 1而在VB中= = -1(因此你不应该将C函数的输出与true进行比较,因为你试图将-1与1进行比较)

  2. 不在Vb中是一个按位NOT(等于C的〜运算符而不是!运算符),因此它取消了每个位,因此否定1(C中为真)将导致非零值这是真的,不仅适用于VB的真值-1(根据二进制补码规则[111111111],它的位格式都是一个)并且否定所有位[0000000000]等于零。

  3. 为了更好地理解,请参阅Is there a VB.net equivalent for C#'s ! operator?

    上的答案

答案 8 :(得分:0)

在vb 2010/12中对这些线路产生了影响 使用顶行,必须关闭Option Strict。

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

感谢您回答我的问题。 (我正在学习)