最近我注意到一些编写“if”语句的程序员的风格倒退。也就是说,在测试中,他们首先将常量值,然后是他们正在测试的变量。例如,他们写道:
bar = foo();
if (MY_CONSTANT == bar) {
/* then do something */
}
对我而言,这使代码难以阅读。因为我们真的在讨论测量变量“bar”的值而不是所有等于“MY_CONSTANT”的变量,所以我总是把变量放在第一位。它是一种未说出口的语法。
无论如何,我看到一些程序员总是以相反的顺序执行此操作。此外,我在过去几年中才注意到这一点。我已经用C语言编程了超过25年,直到比如说过去4年左右我才看到这个。所以我的问题是:
人们是否有理由这样做,如果是这样的话是什么?这是某些语言或项目的通用标准,还是在某些大学教授?还是只有少数人试图与众不同?
答案 0 :(得分:18)
这被称为" Yoda-Style" (或"尤达条件"或"尤达符号")并且应该防止你意外写作
type = "friends.level"
自
if (bar = MY_CONSTANT) {
/* then do something */
}
会触发编译器错误。
这个名字来源于星球大战人物尤达也在使用的罕见的扭曲句子构造。
在我看来使用" Yoda-Style"使代码理解更难,因为它违反了正常的句子构造规则。此外,代码质量检查器(或者在评论中提到甚至可能是编译器本身)也应该抱怨这样的分配,因此(imho)没有充分的理由来混淆你的代码。
答案 1 :(得分:7)
这是15年前有人认为最好的最佳实践。所谓的好处是,它可以阻止某人进行意外分配而不是比较。
这是可疑的,现在它是100%没有实际意义,因为任何值得使用的编译器都会警告分支机构操作员的分配,但成群的旅行者仍然会复制最佳实践,甚至没有想到它意味着什么或它是什么。