使用if(0 == foo())而不是(foo()== 0)有什么好处?

时间:2011-07-25 16:40:51

标签: java c++ coding-style

我发现有些程序员想在比较运算符中这样编码。我发现阅读起来比较困难......

if (0 == foo()){
    ....
}

foo() == 0在可读性方面有什么不同吗?使用0 == foo()的优势是什么?

5 个答案:

答案 0 :(得分:6)

在这种情况下没有区别,但在比较字符串时,最好首先使用字符串常量来避免空指针异常。

if ("somestring".equals(someVarString)) {
// doSomething
}

因此someVarString可以为null并且测试仍然有效。而如果你把测试翻到:

if (someVarString.equals("somestring")) {
// doSomething
}

如果someVarString为null,它将导致NPE。

答案 1 :(得分:4)

不,我认为这样做的最佳理由是:

0 == foo

是为了确保你不会忘记一个=会使它成为

if (0 = foo)

通常会引发编译器错误而不是

if (foo = 0)

会产生一个难以发现的错误。

答案 2 :(得分:3)

这种风格的优点在于,在所有情况下,如果您键入=而不是==,则编译器会保证投诉,因为您无法分配数字。

例如

  bool a = 1;
  if (0 = a) 
  { }
  else if( 1 = a ) 
  { }

不会编译, 而

bool a = 1;
  if (a = 0 ) 
  { }
  else if( a = 1 ) 
  { }

不是非法的(可能会产生编译器警告)

那就是说,我同意这看起来很难看,而且通常是反过来。

答案 3 :(得分:1)

在表现方面,没有。

可读性是主观的;我个人认为0 == foo()foo() == 0稍微尴尬。

我看到的唯一支持if (0 == var)的论点是,如果你不小心将其输入为if (0 = var),编译器会抱怨。但是,大多数现代编译器在看到if (var = 0)时会发出警告,使得论证没有实际意义。此外,由于if (foo() = 0)不是有效代码,因此这种思路甚至不适用于您的情况。

答案 4 :(得分:1)

没有性能影响,人们这样做的原因是确保他们不会意外地键入=运算符而不是==比较运算符(因为编译器会抱怨你无法分配常量)。

我发现可读性惩罚比我更喜欢,所以我不这样做。其他人显然已经习惯了。