我发现有些程序员想在比较运算符中这样编码。我发现阅读起来比较困难......
if (0 == foo()){
....
}
foo() == 0
在可读性方面有什么不同吗?使用0 == foo()的优势是什么?
答案 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)
没有性能影响,人们这样做的原因是确保他们不会意外地键入=运算符而不是==比较运算符(因为编译器会抱怨你无法分配常量)。
我发现可读性惩罚比我更喜欢,所以我不这样做。其他人显然已经习惯了。