Emi*_*mil 10 language-agnostic performance coding-style
前几天我在这里编写代码,编写了一些带有整数的if语句,这些整数总是0或者1(实际上代表bools).我问自己:
当测试阳性结果时,哪个更好; 测试int == 1或int != 0?
例如,给定一个int n,如果我想测试它是否true,我应该使用n == 1或n != 0?
在速度,处理能力等方面有什么不同吗?
请忽略int可能更多/更少于1/ 的事实0,它是无关紧要的并且不会发生.
Mir*_*uta 47
人类的大脑更好的流程语句不包含否定,这使得"int == 1"更好的方式.
Ree*_*sey 35
这真的取决于.如果您使用支持布尔值的语言,则应使用布尔值,而不是整数,即:
if (value == false)
Run Code Online (Sandbox Code Playgroud)
要么
if (value == true)
Run Code Online (Sandbox Code Playgroud)
话虽如此,使用真正的布尔类型,只需编写它就完全有效(通常更好):
if (!value)
Run Code Online (Sandbox Code Playgroud)
要么
if (value)
Run Code Online (Sandbox Code Playgroud)
在大多数现代语言中,使用整数进行布尔运算的确很少.
话虽这么说,如果你使用的语言不直接支持布尔值,那么这里最好的选择实际上取决于你如何定义真假.通常false是0,并且是0 true以外的任何东西.在那种情况下,使用if (i == 0)(用于错误检查)和if (i != 0)进行真正的检查.
如果你保证0和1是唯一的两个值,我可能会使用,if (i == 1)因为否定更复杂,更有可能导致维护错误.
在非0的int表示布尔值'true'和0'false'的语言中,我会倾向于使用,if (int != 0)因为它表示相同的含义,if (int)而int == 1表示更多整数值等于1而不是布尔值为true.可能只是我.在支持布尔类型的语言中,始终使用它而不是整数.
一个Daft问题真的.如果你测试1,测试1,如果你测试为零,测试为零.
添加else声明可以使选择看似随意.我会选择哪个最有意义,或具有更多的上下文意义,默认或"自然"行为,例如预期的出现频率.
这个选择之间int == 0,并int != 1很可能归结为主观评价这可能是不值得担心.
两点:
1)如上所述,更明确的是胜利.如果您向空列表添加内容,您不仅希望其大小不为零,而且还希望它显式为1.
2)你可能想要做(1 == int)那样如果你忘记了=你最终会遇到编译错误而不是调试会话.