"if" 语句的编码风格

Coding style of "if" statements

最近我注意到一些程序员的风格是倒着写 "if" 语句。也就是说,在测试中,他们将常量值放在第一位,然后将他们正在测试的变量放在第二位。因此,例如他们写道:

bar = foo();
if (MY_CONSTANT == bar) {
    /*  then do something */
}

对我来说,这使得代码有些难以阅读。因为我们真正谈论的是测试变量 "bar" 的值而不是所有等于 "MY_CONSTANT" 的变量,所以我总是把变量放在第一位。这是一种不言而喻的语法。

无论如何,我看到一些程序员总是以相反的顺序来做这件事。此外,我只是在过去几年才注意到这一点。我用 C 语言编程已经超过 25 年了,直到最近 4 年左右我才看到这一点。所以我的问题是:

人们这样做有什么原因吗?如果有,那是什么原因?这是某些语言或项目中的通用标准,还是在某些大学中教授?还是只有少数人试图与众不同?

这称为 "Yoda-Style"(或 "Yoda conditions" 或 "Yoda notation"),应该可以防止您不小心写入

if (bar = MY_CONSTANT) {
    /*  then do something */
}

因为

if (MY_CONSTANT = bar) {
    /*  then do something */
}

会触发编译器错误。

这个名字来源于星球大战角色尤达也在使用的不常见的扭曲句子结构。

在我看来,使用 "Yoda-Style" 会使代码更难理解,因为它违反了正常的句子构造规则。此外,代码质量检查器(或者如评论中所述,甚至可能是编译器本身)无论如何都应该抱怨此类分配,因此(恕我直言)没有充分的理由混淆您的代码。

这是一个 最佳实践,大约 15 年前有人认为这是最好的。据称的好处是它可以防止某人进行意外分配而不是比较。

这是可疑的,现在它是 100% 没有实际意义的,因为任何值得使用的编译器都会警告分支运算符中的赋值,但成群结队的旅鼠仍然复制最佳实践,甚至没有思考它的含义或用途。