当我使用If语句并且我想检查布尔值是否为假时我应该使用“Not”关键字还是只是= false,就像这样
If (Not myboolean) then
VS
If (myboolean = False) then
哪种做法更好,更具可读性?
答案 0 :(得分:20)
当然,使用“不”。而对于交替使用“If(myboolean)”而不是“If(myboolean = true)”
如果你给布尔字一个可读的名字,那么效果最好:
if (node.HasChildren)
答案 1 :(得分:7)
由于两种风格之间没有功能差异,因此这只是个人偏好的事情之一。
如果您正在处理已设置标准的代码库,那么请坚持下去。
答案 2 :(得分:2)
使用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");
可怕的风格,但我看到更糟糕的潜入生产。当然,在其他人的手表上。 : - )
答案 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之间的差异在于如何定义布尔值。
在C中= = 1而在VB中= = -1(因此你不应该将C函数的输出与true进行比较,因为你试图将-1与1进行比较)
不在Vb中是一个按位NOT(等于C的〜运算符而不是!运算符),因此它取消了每个位,因此否定1(C中为真)将导致非零值这是真的,不仅适用于VB的真值-1(根据二进制补码规则[111111111],它的位格式都是一个)并且否定所有位[0000000000]等于零。
为了更好地理解,请参阅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
感谢您回答我的问题。 (我正在学习)