"if"语句的编码风格

msu*_*ius 6 c coding-style

最近我注意到一些编写"if"语句的程序员的风格倒退.也就是说,在测试中,他们首先将常量值,然后是他们正在测试的变量.例如,他们写道:

bar = foo();
if (MY_CONSTANT == bar) {
    /*  then do something */
}
Run Code Online (Sandbox Code Playgroud)

对我而言,这使代码难以阅读.因为我们真的在讨论测量变量"bar"的值而不是所有等于"MY_CONSTANT"的变量,所以我总是把变量放在第一位.它是一种未说出口的语法.

无论如何,我看到一些程序员总是以相反的顺序执行此操作.此外,我在过去几年中才注意到这一点.我已经用C语言编程了超过25年,直到比如说过去4年左右我才看到这个.所以我的问题是:

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

vla*_*sch 18

这被称为"尤达式"(或"尤达条件"或"尤达符号"),应该防止你不小心写

if (bar = MY_CONSTANT) {
    /*  then do something */
}
Run Code Online (Sandbox Code Playgroud)

以来

if (MY_CONSTANT = bar) {
    /*  then do something */
}
Run Code Online (Sandbox Code Playgroud)

会触发编译器错误.

这个名字源于星球大战人物尤达也在使用的罕见的扭曲句子结构.

在我看来,使用"Yoda-Style"使得对代码的理解更加困难,因为它违反了正常的句子构造规则.此外,代码质量检查器(或者在评论中提到甚至可能是编译器本身)也应该抱怨这样的分配,因此(imho)没有充分的理由来混淆你的代码.

  • @Rhymoid"应该是"而"实际上"通常是两种不同的野兽...... (3认同)
  • 我希望这个问题的答案会更有价值. (2认同)
  • 顺便说一句,这是做这件事的最无聊的原因之一,因为有能力的编制者(或短语)会警告条件中的任务. (2认同)
  • @Rhymoid人们倾向于忽略编译器警告.这是唯一和充分的理由.顺便说一句,由于构造完全合法,因此没有理由让标准的编译器对其进行警告. (2认同)
  • @EugeneSh.当你总是`-Wall -Werror`时,你不能真的忽略警告,这应该是所有生产代码的默认值. (2认同)

Ser*_*eyA 7

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

这是可疑的,现在100%没有实际意义,因为任何值得使用的编译器都会警告分支操作员的分配,但成群的旅行者仍然会复制最佳实践,甚至不考虑它的含义或内容.