我多次看到人们使用if(condition)
asif(0==x)
而不是if(x==0)
. 据说这是一个很好的做法,但有人可以解释为什么会这样吗?它有什么区别?相反,它降低了我认为的可读性。
问问题
224 次
5 回答
10
它降低可读性的事实纯粹是主观的。(虽然我也有同样的感觉,但那是因为我一直在处理x==0
比其他方式更多的事情,所以我已经习惯了)。
这样做是为了防止意外分配:
if(0=x)
将产生编译器错误,
if(x=0)
惯于。
于 2012-09-24T09:03:57.880 回答
2
就个人而言,我不喜欢这种做法。但它变得流行是因为以下原因:
区分assignment operator
和布尔条件。
if(x = 0)
这条线有两个目的:
- 将 0 分配给 x。
- 使条件
false
导致它等同于if(0)
为了避免这些错误,有些人更喜欢if(0 = x)
这会导致编译时错误。
于 2012-09-24T09:07:20.577 回答
1
它只是避免了键入错误,您将键入if (a = 0)
而不是if (a == 0)
. 如果使用 Yoda 样式if (0 = a)
而不是if (0 == a)
.
另一方面,它并不能防止if (b = a)
和b
是另一个变量的情况。没有银弹。
更好的是-Wall -Wextra
在编译时使用。添加-Werror
如果您想偏执并将所有警告视为错误(最好这样做)
于 2012-09-24T09:06:39.097 回答
0
是的,它的可读性较差(恕我直言),但这可以避免使用分配而不是检查其常见错误==
if( 0 = variable ) { // Fail 0 is constant
有趣的事实:有人称之为“尤达条件”
于 2012-09-24T09:05:02.420 回答
0
不,这只是你的习惯,比如左边的变量名和右边的常量。但实际上它会给你确切的代码,如果你离开
如果 (0=x)
代替
if(0==x) 错误然后它会给你一个错误,你可以很容易地修改它但是如果在相反的情况下它很难调试
于 2012-09-24T09:06:03.440 回答