我应该测试是否等于1或不等于0?

Emi*_*mil 10 language-agnostic performance coding-style

前几天我在这里编写代码,编写了一些带有整数的if语句,这些整数总是0或者1(实际上代表bools).我问自己:

当测试阳性结果时,哪个更好; 测试int == 1int != 0

例如,给定一个int n,如果我想测试它是否true,我应该使用n == 1n != 0

在速度,处理能力等方面有什么不同吗?

请忽略int可能更多/更少于1/ 的事实0,它是无关紧要的并且不会发生.

Mir*_*uta 47

人类的大脑更好的流程语句不包含否定,这使得"int == 1"更好的方式.

  • 或者人类可以更好地处理积极的陈述. (79认同)
  • Mark Byers的+1;)我是故意写的 (15认同)
  • 这不是一个笑话的答案,而且这实际上是一个非常好的观点. (9认同)
  • 你不能说人类不喜欢不使用很少的否定.等等,还是相反?:-) (5认同)
  • 人类的大脑?那计算机的大脑怎么样? (2认同)
  • -1为"不包含否定",我的大脑无法处理*(我实际上没有给你一个-1:)* (2认同)

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)因为否定更复杂,更有可能导致维护错误.

  • 我不喜欢使用布尔变量进行测试,而不像常量那样进行测试.我更喜欢用'is'命名我的布尔变量,例如isFileOpen.我的测试将是"if(isFileOpen)",而不是繁琐的"if(isFileOpen == true)". (3认同)
  • `== true`或`== true == true == true`的`== false`是无稽之谈.只需编写`if(!value){`/`if(value){`(将语法和格式调整为上下文). (2认同)

JAB*_*JAB 10

如果你正在处理只能是1或0的值,那么我建议你先使用布尔值,然后再使用if (bool)if (!bool).


Jul*_*ain 9

在非0的int表示布尔值'true'和0'false'的语言中,我会倾向于使用,if (int != 0)因为它表示相同的含义,if (int)int == 1表示更多整数值等于1而不是布尔值为true.可能只是我.在支持布尔类型的语言中,始终使用它而不是整数.


Jam*_*ris 7

一个Daft问题真的.如果你测试1,测试1,如果你测试为零,测试为零.

添加else声明可以使选择看似随意.我会选择哪个最有意义,或具有更多的上下文意义,默认或"自然"行为,例如预期的出现频率.

这个选择之间int == 0,并int != 1很可能归结为主观评价这可能是不值得担心.

  • 不会-1,因为前两点非常有效,但称之为愚蠢的问题有点多.此外,代码清晰度/可读性可能非常主观,但我不会称之为"不值得担心". (2认同)

Pau*_*bel 6

两点:

1)如上所述,更明确的是胜利.如果您向空列表添加内容,您不仅希望其大小不为零,而且还希望它显式为1.

2)你可能想要做(1 == int)那样如果你忘记了=你最终会遇到编译错误而不是调试会话.