操作数的顺序是否与比较运算符有关?
问题描述:
当检查如果一个对象等于某个值,是有之间的一些差异:操作数的顺序是否与比较运算符有关?
myObject == someValue
或
someValue == myObject
换句话说,不比较运算符的操作数的顺序有关系吗?这是编码风格的问题吗?
我一直在使用前者,但一个项目一直在使用后者,这是我以前从未见过的。
例如
if (data != null)
data.Write(writer);
或
if (null != data)
data.Write(writer);
我一直在使用前者,而在该项目的一些成员已经使用后者
。
谢谢。
答
我不认为有任何区别,或者至少没有一个编译器不会优化到同样的事情。
您正在观察的内容通常称为Yoda Conditions。 (因为大声朗读时的条件听起来像语言的风格,类似于尤达所说的。)他们大多是个人喜好的问题。
人谁主张他们是很快指出优点,例如:
if (something = true)
会产生一个运行时错误,而:
if (true = something)
会产生一个编译错误,并立即被捕获。尽管我会反驳说单元测试应该在发现错误之前找到错误。同样会争辩说,来自团队中其他程序员的任何混淆(即使只是你发布这个问题的闲散的好奇心)在项目上失去了时间。但我离题:)
答
他们在我看来是一样的。如果我说:
(1 != 2) = true
(2 != 1) = true
两者都会导致相同的答案。我能想到的唯一的事情就是如果你在哪里工作,就有一种编码标准需要某种方式或者其他方式(我从来没有见过这样的编码标准)。我会坚持你目前正在从事的项目正在做的事情。
唯一的区别在于可读性。当硬编码值位于比较运算符的右侧时,大多数人发现它更易读。 –
问题,事实并非如此。 '(null!= data)'通俗地称为“尤达条件”。五年前,我为了目前的工作而异想天开地采访了一位专家,但他们仍然对此表示不满。我通常只会在另一个操作数是长方法调用或其他操作数时才这样做,并且首先将常量放在第一个果实可读的位置,但在这种情况下,您应该将它分配给本地。 –