使用 if(...) 时,为啥这被认为是一种好的编程习惯? [复制]
Posted
技术标签:
【中文标题】使用 if(...) 时,为啥这被认为是一种好的编程习惯? [复制]【英文标题】:When using if(...) , why is this considered a good programming practice? [duplicate]使用 if(...) 时,为什么这被认为是一种好的编程习惯? [复制] 【发布时间】:2012-09-24 09:02:02 【问题描述】:可能重复:How to check for equals? (0 == i) or (i == 0)Is there a difference between i==0 and 0==i?
我多次看到人们使用if(condition)
作为if(0==x)
而不是if(x==0)
。据说这是一个很好的做法,但有人可以解释为什么会这样吗?它有什么区别?在我看来,它反而会降低可读性。
【问题讨论】:
试着想象你犯了使用 = 而不是 == 的错误(同时想想你与 0 以外的东西进行比较的情况)。 这不是好的做法,这是恐龙的做法。 1990 年之前编程的人过去常常写这样的代码,认为自己很聪明。 1990 年,Borland 发布了一个编译器,对“可能不正确的赋值”发出警告,从那时起,每个编译器都对此发出警告。编写混淆代码是一个糟糕的解决方案,使用适当的静态检查工具是一个更好的现代想法。 虽然同样值得牢记的是,那些在阅读等式相反的代码时比较困难的人(包括我),并没有正确理解“等式”的含义。因此,0==x
代码仅在读者猜测x==0
代码的程度上被混淆。考虑到人类的阅读速度,这在很大程度上是相当大的,但你希望程序员阅读代码而不是普通文本。
【参考方案1】:
它降低可读性的事实纯粹是主观的。 (虽然我也有同样的感觉,但那是因为我和x==0
打交道的次数比其他方式多,所以我习惯了。
这样做是为了防止意外分配:
if(0=x)
会产生编译器错误,
if(x=0)
不会。
【讨论】:
【参考方案2】:就个人而言,我不喜欢这种做法。但它之所以流行,是因为以下原因:
区分assignment operator
和布尔条件。
if(x = 0)
这行有两个目的:
-
将 0 分配给 x。
使条件
false
等价于if(0)
为了避免这些错误,有些人更喜欢if(0 = x)
,这会导致编译时错误。
【讨论】:
【参考方案3】:它只是避免了输入if (a = 0)
而不是if (a == 0)
的输入错误。使用 Yoda 风格,如果你写的是 if (0 = a)
而不是 if (0 == a)
,你会得到一个编译错误。
另一方面,它不会阻止if (b = a)
的情况,而b
是另一个变量。没有灵丹妙药。
编译时最好使用-Wall -Wextra
。添加-Werror
如果您想偏执并将所有警告视为错误(最好这样做)
【讨论】:
如果b
是一个常数,它会阻止if (b = a)
。 0
是这样的,所以实际上是一样的......
这个想法是b
应该是另一个变量。现已修复。
是的。 const B b;
是一个 const 变量,if (b=a)
会失败。 :D
是的,但这不是一般情况。这就是我要指出的。【参考方案4】:
是的,它的可读性较差(恕我直言),但这可以避免使用分配的常见错误,而不是检查其==
if( 0 = variable ) // Fail 0 is constant
有趣的事实:有人称之为“尤达条件”
【讨论】:
【参考方案5】:不,这只是你的习惯,比如左边的变量名和右边的常量。 但实际上它会给你确切的代码,如果你离开
如果 (0=x)
而不是
如果(0==x) 错误地,它会抛出一个错误,你可以轻松修改它,但如果在相反的情况下,它很难调试
【讨论】:
以上是关于使用 if(...) 时,为啥这被认为是一种好的编程习惯? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
始终使用 this 关键字为(自动)属性添加前缀是不是被认为是一种好习惯?
使用 os.system("bash code") 在 Python 脚本中调用 bash 命令是一种好的风格吗? [关闭]