最近我注意到一些编写"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)没有充分的理由来混淆你的代码.
这是15年前有人认为最好的最佳实践.据称的好处是,它可以防止有人进行意外分配而不是比较.
这是可疑的,现在100%没有实际意义,因为任何值得使用的编译器都会警告分支操作员的分配,但成群的旅行者仍然会复制最佳实践,甚至不考虑它的含义或内容.