Performance 我应该测试是否等于1还是不等于0?
前几天我在这里编写代码,编写了几个if语句,其中的整数总是Performance 我应该测试是否等于1还是不等于0?,performance,language-agnostic,coding-style,Performance,Language Agnostic,Coding Style,前几天我在这里编写代码,编写了几个if语句,其中的整数总是0或1(实际上充当bools)。我问自己: 检测阳性结果时,哪个更好;测试int==1或int!=0 例如,给定一个intn,如果我想测试它是否为true,我应该使用n==1还是n!=0 在速度、处理能力等方面有什么区别吗 请忽略一个事实,即int可能大于/小于1/0,这是不相关的,不会发生。人脑更好地处理不包含否定的语句,这使得“int==1”的方式更好。这取决于实际情况。如果您使用的语言支持布尔值,则应使用布尔值,而不是整数,即: i
0
或1
(实际上充当bool
s)。我问自己:
检测阳性结果时,哪个更好;测试int==1
或int!=0
例如,给定一个intn
,如果我想测试它是否为true
,我应该使用n==1
还是n!=0
在速度、处理能力等方面有什么区别吗
请忽略一个事实,即int可能大于/小于
1
/0
,这是不相关的,不会发生。人脑更好地处理不包含否定的语句,这使得“int==1”的方式更好。这取决于实际情况。如果您使用的语言支持布尔值,则应使用布尔值,而不是整数,即:
if (value == false)
或
也就是说,对于真正的布尔类型,只需编写以下代码就完全有效(通常更好):
if (!value)
或
在大多数现代语言中,几乎没有理由在布尔运算中使用整数
也就是说,如果您使用的语言不直接支持布尔值,那么这里的最佳选择实际上取决于您如何定义true和false。通常,false
是0,true
不是0。在这种情况下,使用if(i==0)
(用于假检查)和if(i!=0)
进行真检查
如果保证0和1是唯一的两个值,我可能会使用
If(I==1)
,因为否定更复杂,更容易导致维护错误。如果只有两个值,那么我会使用第一个值:
if(int == 1)
因为它更明确。如果没有对值的约束,我会不这样认为。(假设您的int只能是1或0),这两个语句在逻辑上是等价的。不过,我建议使用==语法,因为我认为在不引入不必要的否定时,大多数人会更清楚。当使用整数作为布尔值时,我更喜欢将它们解释为:false=0,true=非零
我将把条件语句写成int==0和int!=一个愚蠢的问题。如果你测试1,测试1,如果你测试0,测试0 添加
else
语句可能会使选择看起来是任意的。我会选择最有意义的,或者更具上下文意义的,默认或“自然”行为,比如预期发生频率
在
int==0
和int!=1
很可能归结为不值得担心的主观评估。如果您使用的值只能是1或0,那么我建议您首先使用布尔值,然后只使用If(bool)
或If(!bool)
在非0的int表示布尔值'true',0'false'的语言中,像C一样,我倾向于使用if(int!=0)
,因为它表示与if(int)
相同的含义,而int==1
表示的更多是等于1的整数值,而不是布尔值true。也许只有我一个人。在支持布尔类型的语言中,始终使用它而不是int。老实说,如果int的值仅为1或0,您甚至可以说:
if (int)
这就等于说
if (int != 0)
但你可能会想用
if (int == 1)
因为非零可能会让答案不是1,即使你说不用担心它。如果你的意思是,我会说这取决于语义
while(!abort)
否定是正常的
如果(退出)中断代码>也可以。两点:
IF INT IS 1
NEXT SENTENCE
ELSE MOVE "INT IS NOT ONE" TO MESSAGE.
1) 如上所述,更加明确是一种胜利。如果您将某个内容添加到空列表中,您不仅希望它的大小不为零,而且还希望它显式为1
2) 你可能想做什么
(1==int)
这样,如果您忘记了an=,那么最终将出现编译错误,而不是调试会话
if( is_numeric( $int ) ) { its a number }
elseif( !$int ) { $int is not set or false }
else { its set but its not a number }
讨论结束:p我同意大多数人在这篇文章中所说的话。如果您有两种不同的可能性,那么使用布尔值会更有效。它还使代码更易于阅读和解释
如果(bool){…}我来自c世界。起初我对objective-c不太了解。过了一段时间,我更喜欢这样的东西:
if (int == YES)
或
在c中,即:
if (int == true)
if (int == false)
现在,我也使用varchar
而不是integer
作为表键,例如
name marital_status
------ --------------
john single
joe married
这比:
name marital_status
------ --------------
john S
joe M
或
正如其他人所说,使用==
通常比使用更容易阅读=代码>
也就是说,大多数处理器都有一个特定的比较零操作。这取决于特定的编译器、处理器等,但使用!=因此,0
超过==1
不过,大多数语言都允许你使用if(int)
和if(!int)
,这两种语言既可读性更强,又能给你带来微乎其微的速度加成。我有点偏执。如果值是0
或1
,则可能是2
。可能不是今天,也可能不是明天,但是一些维护程序员会在子类中做一些奇怪的事情。有时候我自己也会犯错[嘘,别告诉我的老板]。所以,让代码告诉我值是0
或1
,否则它会哭
if (i == 0) {
... 0 stuff ...
} else if (i == 1) {
... 1 stuff ...
} else {
throw new Error();
}
(你可能更喜欢switch
——我发现它在花括号语言中的语法太重了。)你不能说人类不喜欢使用不多的否定。W
name marital_status
------ --------------
john single
joe married
name marital_status
------ --------------
john S
joe M
name marital_status
------ --------------
john 1
joe 2
if (i == 0) {
... 0 stuff ...
} else if (i == 1) {
... 1 stuff ...
} else {
throw new Error();
}