当使用 if(..) 时,为什么这被认为是一个好的编程实践

When using if(...) , why is this considered a good programming practice?

本文关键字:一个 编程 认为是 if 为什么      更新时间:2023-10-16

可能的重复项:
如何检查相等?(0 == i) 或 (i == 0)
i==0 和 0==i 之间有区别吗?

我已经看到很多次人们使用if(condition)作为if(0==x)而不是if(x==0)。据说这是一种很好的做法,但有人可以解释为什么会这样吗?它有什么区别?相反,在我看来,它降低了可读性。

它降低可读性的事实纯粹是主观的。(虽然我也有同样的感觉,但那是因为我一直在处理x==0而不是相反的方式,所以我习惯了)。

这样做是为了防止意外分配:

if(0=x)

将产生编译器错误,

if(x=0)

不会。

就个人而言,我不喜欢这种做法。 但它之所以流行,原因如下:

区分assignment operator和布尔条件。

if(x = 0)

这句台词有两个目的:

  1. 将 0 分配给 x。
  2. 使条件false因为它等同于if(0)

为了避免这些错误,有些人更喜欢if(0 = x)这会导致编译时错误。

它只是避免了键入错误,即键入if (a = 0)而不是if (a == 0)。使用 Yoda 风格,如果您编写if (0 = a)而不是if (0 == a),则会出现编译错误。

另一方面,它不能防止if (b = a)的情况,b是另一个变量。没有灵丹妙药。

最好在编译时使用-Wall -Wextra。如果您想偏执并将所有警告视为错误,请添加-Werror(最好这样做)

是的,它的可读性较差(恕我直言),但这可以避免分配的常见错误,而不是检查其==

if( 0 = variable ) { // Fail 0 is constant

有趣的事实:有人称之为"尤达条件"

不,你只是习惯于阅读左边的变量名和右边的常量。但实际上它会给你确切的代码,如果你离开

如果 (0=x)

而不是

if(0==x)错误地,它会抛出一个错误,您可以轻松修改,但如果在相反的情况下很难调试