我前几天在这里编写代码,用一些整数编写if语句,这些整数总是0
或1
(实际上充当bool
s)。我问自己:
当测试阳性结果时,哪个更好;测试int == 1
或int != 0
?
例如,给定一个int n
,如果我想测试它是true
,我应该使用n == 1
还是n != 0
?
在速度,处理能力等方面有什么不同吗?
请忽略int可能比1
/ 0
更多/更少的事实,这是无关紧要的,也不会发生。
答案 0 :(得分:47)
人类的大脑更好的流程语句不包含否定,这使得“int == 1”更好的方式。
答案 1 :(得分:35)
这取决于。如果您使用支持布尔值的语言,则应使用布尔值,而不是整数,即:
if (value == false)
或
if (value == true)
话虽如此,使用真正的布尔类型,它只是写得非常有效(通常更好):
if (!value)
或
if (value)
在大多数现代语言中,使用整数进行布尔运算的确很少。
话虽如此,如果您使用的语言不直接支持布尔值,那么这里最好的选择实际上取决于您如何定义真假。通常,false
为0,true
不是0。在这种情况下,使用if (i == 0)
(用于错误检查)和if (i != 0)
进行真正的检查。
如果你保证0和1是唯一的两个值,我可能会使用if (i == 1)
,因为否定更复杂,更有可能导致维护错误。
答案 2 :(得分:10)
如果你正在处理的值只能是1或0,那么我建议你先使用布尔值,然后再做if (bool)
或if (!bool)
。
答案 3 :(得分:9)
在非0的int表示布尔值'true'和0'false'的语言中,与C一样,我倾向于使用if (int != 0)
,因为它表示与if (int)
相同的含义而int == 1
表示整数值等于1而不是布尔值true。可能只是我。在支持布尔类型的语言中,始终使用它而不是整数。
答案 4 :(得分:7)
真的是Daft的问题。如果你测试1,测试1,如果你测试为零,测试为零。
添加else
语句可以使选择看似随意。我会选择哪个最有意义,或者具有更多的上下文意义,默认或“自然”行为,例如预期的出现频率。
int == 0
和int != 1
之间的这种选择很可能归结为可能不值得担心的主观评价。
答案 5 :(得分:6)
两点:
1)如上所述,更明确的是胜利。如果您向空列表添加内容,您不仅希望其大小不为零,而且还希望它明确为1.
2)你可能想做 (1 == int) 这样,如果你忘了=你最终会遇到编译错误,而不是调试会话。
答案 6 :(得分:3)
老实说,如果int的值只有1或0,你甚至可以说:
if (int)
这与说
相同if (int != 0)
但你可能想要使用
if (int == 1)
因为即使你说不担心答案,否则不会为0而可能让答案不是1。
答案 7 :(得分:2)
IF INT IS 1
NEXT SENTENCE
ELSE MOVE "INT IS NOT ONE" TO MESSAGE.
答案 8 :(得分:2)
如果只有两个值,那么我会使用第一个:
if(int == 1)
因为它更明确。如果价值没有限制,我会不这么认为。
答案 9 :(得分:2)
正如其他人所说,使用==
比使用!=
更容易阅读。
也就是说,大多数处理器都有一个特定的比较为零的操作。它取决于具体的编译器,处理器等,但结果!= 0
使用== 1
可能会有一个几乎无法估量的小速度优势。
大多数语言都会让你使用if (int)
和if (!int)
,这样更具可读性,可以获得极小的速度加成。
答案 10 :(得分:2)
我是偏执狂。如果值为0
或1
,则可能为2
。可能不是今天,可能不是明天,但是一些维护程序员会在子类中做一些奇怪的事情。有时我自己犯错误 [嘘,不要告诉我的雇主] 。所以,让代码说告诉我价值是0
或1
,否则它会对木乃伊哭泣。
if (i == 0) {
... 0 stuff ...
} else if (i == 1) {
... 1 stuff ...
} else {
throw new Error();
}
(您可能更喜欢switch
- 我发现它在大括号语言中的语法太重了。)
答案 11 :(得分:1)
当使用整数作为布尔值时,我更喜欢将它们解释如下:false = 0,true =非零。
我会将条件语句写为 int == 0 和 int!= 0 。
答案 12 :(得分:1)
我会说这取决于语义,如果条件意味着
while ( ! abort )
否定是可以的。
if ( quit ) break;
也可以。
答案 13 :(得分:1)
if( is_numeric( $int ) ) { its a number }
elseif( !$int ) { $int is not set or false }
else { its set but its not a number }
讨论结束:P
答案 14 :(得分:1)
我同意大多数人在这篇文章中所说的话。如果您有两种不同的可能性,那么使用布尔值会更有效。它还使代码更容易阅读和解释。
if(bool){...}
答案 15 :(得分:1)
我来自c世界。起初我对Objective-c了解不多。过了一段时间,我更喜欢这样的东西:
if (int == YES)
或
if (int == NO)
c中的,即:
if (int == true)
if (int == false)
这些天,我使用varchar
代替integer
作为表格键,例如。
name marital_status
------ --------------
john single
joe married
好多了:
name marital_status
------ --------------
john S
joe M
或
name marital_status
------ --------------
john 1
joe 2
答案 16 :(得分:0)
(假设你的整数只能是1或0)这两个陈述在逻辑上是等价的。我建议使用==语法,因为我认为当你不引入不必要的否定时,大多数人都会更清楚。