【发布时间】:2016-04-19 15:40:44
【问题描述】:
最近我注意到一些程序员倒写“if”语句的风格。也就是说,在测试中,他们将常量值放在第一位,然后将他们正在测试的变量放在第二位。例如,他们写道:
bar = foo();
if (MY_CONSTANT == bar) {
/* then do something */
}
对我来说,这让代码有点难以阅读。因为我们真正谈论的是测试变量“bar”的值,而不是所有等于“MY_CONSTANT”的变量,所以我总是把变量放在第一位。它是一种不言而喻的语法。
无论如何,我看到一些程序员总是以相反的顺序执行此操作。此外,我只是在过去几年中才注意到这一点。我已经用 C 语言编程超过 25 年了,直到过去 4 年左右我才看到这一点。所以我的问题是:
人们这样做有什么原因吗?如果有,那是什么原因?这是某些语言或项目中的通用标准,还是在某些大学中教授?还是只有少数人想要与众不同?
【问题讨论】:
-
@vlad_tepesch 解释了为什么会出现这种风格;但使用与否主要是个人观点和风格的问题。
-
尤达条件不使用你应该。它们是古老的,现代编译器已经警告将正常顺序。
-
我认为这不是最近的事。大学的联系或许可以解释为什么它会持续存在。教授们厌倦了一次又一次地处理同一个错误,而制造这个错误的学生不太可能注意编译器警告。教学生这样写可以节省教授调试学生代码的时间。
-
@JohnColeman:这样的代码在像公司这样的专业环境中越来越被拒绝,因为编译器会在超过 10 年的时间里警告它们。教学生使用它们是错误的方法。更简单且更常见的做法是拒绝生成启用常见警告的诊断的代码。教授更有可能曾经以这种方式学会了它并且只是保持习惯。可悲的是,大多数教授不喜欢学习新技巧,如果它们对于他们感兴趣的领域并不是真正必要的。
-
我从未见过尤达斯拒绝过。实际上,我更喜欢它们而不是“正常”构造,它偶尔会将实际条件从我的编辑/调试器窗口的 rhs 中推开,因为它是对具有 13 个参数的某些系统调用的结果进行检查。
标签: c coding-style