否定平等与不平等

时间:2009-04-14 02:30:20

标签: coding-style

最近,我一直在阅读一些

的代码
 if (! (a == b) ) 

而不是

 if ( a != b )

在某些地方。

显然这些在逻辑上是等价的,但我想知道是否有任何特别的理由使用其中一个。

在某些情况下,某种情况更可取,还是仅仅是个人风格?

7 个答案:

答案 0 :(得分:12)

我真的很喜欢

if ( a != b )

只是因为你应该少读,并且你能更快地理解程序员想要传输的信息。

请记住程序员花费更多时间阅读代码而不是编写代码,因此您可以做的越多越好,使代码更容易理解。

答案 1 :(得分:9)

大多数情况下这是一个风格问题(我的偏好是'a!= b'),但如果a是一个没有运算符的类的对象,那么操作中可能存在实际差异= =或操作员!=。

答案 2 :(得分:6)

我会避免

if (! (a == b) )

因为它涉及两个操作,其中有一个操作符

if ( a != b )

完全相同的事情。第二个也更具可读性(如果只是略微)。

我遇到的一个非常大的问题

if (! (a == b) )
是的,它让我停下来思考“到底是什么?”好的代码不应该这样做。

答案 3 :(得分:4)

如上所述,具有运算符重载的语言通常不会对每个==强制执行!=。在这种情况下,!(a == b)是必不可少的,因为!= b未定义。此外,可能在上下文中有意义使用!(a == b)。虽然由于本问题其他部分给出的原因,较短的形式是首选,但较长的形式在某些问题集中可能更具描述性。

答案 4 :(得分:1)

你的代码应该尽可能简单,即较少的语句更好,因此a!= b是3个构造而不是! (a = b)即4。

答案 5 :(得分:1)

任何中途正常的编译器都会输出相同的代码(除非==和!=已被重载,如其他地方所述),因此优化问题无关紧要。

我不认为我曾经见过“if(!(a == b))”在一个更大的条件之外,更明确地不使用DeMorgan的定理,但我想我可以把它看作一种方式强调这两个价值观确实应该是相同的,如果不是,就会出现严重错误。然而,下一行的鸣喇叭“扔OmgICantBelieveThisHappenedException()”会更加清晰。 : - )

除了这两种情况,我必须同意“use!=”阵营,因为当你浏览代码时它更清楚。 '!'很容易被忽视,尤其是一些格式约定。

答案 6 :(得分:-5)

这是DeMorgan定理。 (Augustus De Morgan - 数学家)

转到if(a!= b)