代码之家  ›  专栏  ›  技术社区  ›  Nathan W

检查假布尔条件时,Not关键字vs=false

  •  9
  • Nathan W  · 技术社区  · 16 年前

    当我使用if语句时,我想检查布尔值是否为false,应该使用“not”关键字,或者只是=false,就像这样

    If (Not myboolean) then 
    

    VS

    If (myboolean = False) then
    

    哪一个是更好的实践和更具可读性?

    9 回复  |  直到 11 年前
        1
  •  20
  •   James Curran    16 年前

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

    如果给布尔值一个可读的名称,效果最好:

     if (node.HasChildren)
    
        2
  •  7
  •   nickf    16 年前

    因为这两种风格都没有功能上的区别,所以这是属于个人偏好的东西之一。

    如果你正在开发一个已经设置了标准的代码库,那么就坚持下去。

        3
  •  2
  •   Adam Liss    16 年前

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

    有些语言允许您交换 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");
    

    糟糕的风格,但我见过更糟的潜入生产。论 其他 当然,人们的手表。-)

        4
  •  1
  •   torial    16 年前

    一定要用“不”,考虑大声朗读。

    如果你大声朗读:

    如果x为假,则执行y 做Y

    对战

    如果不是x,那么做y

    我想你会发现“不”的路线更自然。尤其是当您选择好的变量名或函数时。

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

        5
  •  1
  •   JohnMcG    16 年前

    !条件

    在C和PRSTL C++中,“!条件”是指条件的计算结果为假真值,“条件==假”是指条件的值必须等于系统设计为假的值。因为不同的实现以不同的方式定义它,所以使用它被认为是更好的实践!条件。

    更新:正如评论中指出的那样——假总是0,这是真的,可能是危险的。

        6
  •  1
  •   Ted    16 年前

    除共识外,当既有真实案例又有虚假案例时,请使用

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

    而不是

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

    (但我不确定巨蟒是不是 x is not None 是真是假。)

        7
  •  1
  •   Konrad Rudolph    16 年前

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

    另外,我有点担心有多少人会用其他语言给出技术性的例子 不适用 在VB中。在VB中,使用 If Not x 而不是 If x = False 是可读性和逻辑性。不是说你需要其他原因。

    完全不同的原因适用于C(++),正确。更真实的是,由于存在真正以不同方式处理这一问题的框架。但是 误导 在VB的上下文中!

        8
  •  0
  •   Community CDub    8 年前

    只要您只处理vb,它就没有任何区别,但是如果您碰巧使用C函数(如win32 api),在测试false时绝对不要使用“not”just“==false”,但是在测试true时不要使用“==true”,而是使用“if(function())”。

    原因是C和VB在如何定义布尔值方面存在差异。

    1. 在c true==1中,而在vb true=-1中(因此,不应将c函数的输出与true进行比较,因为您试图将-1与1进行比较)。

    2. 不在vb中是位不(等于c的~运算符不在!运算符),因此它对每一位进行求反,因此,求反1(c中为真)将产生一个非零值,该值为真,不仅适用于vb true,该值为-1(根据二者的补码规则[111111],该值的位格式为一),求反所有位[0000000000]等于零。

    为了更好的理解,请看我的回答 Is there a VB.net equivalent for C#'s ! operator?

        9
  •  0
  •   Nathan A    11 年前

    在VB 2010/12中与这些行有所不同 对于顶行,必须关闭Option Strict。

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

    谢谢你帮我回答这个问题。(我在学习)