被比较的项目的顺序?

时间:2009-06-16 11:32:08

标签: comparison multilingual

我已经看过这个,但从未听说过为什么......这真的适用于任何语言,不仅仅是C#或VB.NET或Perl等等。

比较两个项目时,有时“检查”值放在左侧而不是右侧。从逻辑上讲,您首先列出变量,然后列出您要比较的值。但我已经看到了相反的情况,首先列出了“常数”。

这种方法有哪些(如果有的话)增益?

所以而不是:

if (myValue > 0)

我见过:

if (0 < myValue)

if (Object.GimmeAnotherObject() != null)

替换为:

if (null != Object.GimmeAnotherObject())

有关于此的任何想法吗?

TIA! 凯文

5 个答案:

答案 0 :(得分:8)

有些开发人员将常量放在左边,如此

if(0 = myValue)

这是因为您将从编译器中收到错误,因为您无法为0分配值。相反,您必须将其更改为

if(0 == myValue)

这可以防止在打字之后进行大量痛苦的调试,因为输入

if(myValue = 0)

完全合法,但很可能是你的意思

if(myValue == 0)

首选不是你想要的。它将巧妙地改变你的程序,并引起各种令人头疼的问题。希望澄清!

答案 1 :(得分:2)

我不认为一个简单的规则,但常数第一或但不变的最后不是一个非常明智的选择。我相信检查应该表达它的语义。例如,我更喜欢在范围检查中使用这两个版本。

if ((low <= value) && (value <= high))
{
    DoStuff(value);
}

但是我同意你提到的例子 - 我会这样做,但是最后一点,并且看不出任何明显的理由这样做。

if (object != null)
{
    DoStuff(object);
}

答案 2 :(得分:2)

在C ++中,这些都是有效的并且编译

if(x == 1)

if(x=1)

但是如果你这样写的话

if(1==x)

if(1=x)

然后捕获到1的赋值,代码将无法编译。

将const变量放在左侧被认为是“更安全”。

一旦你养成了将const变量放在左边进行分配的习惯,它往往会成为你的默认操作模式,这就是为什么你看到它也出现在等式检查中

答案 3 :(得分:2)

对于.Net来说,它是无关紧要的,因为编译器不允许你在如下条件下进行赋值:

if(x=1)

因为(正如其他人所说)这是不好的做法(因为很容易错过)。

一旦您不必担心这一点,将变量放在第一位且值第二位稍微更具可读性,但这是唯一的区别 - 双方都需要进行评估。

答案 4 :(得分:1)

它是一种编码练习,用于捕捉类似'!='的拼写错误,例如输入'='。

如果你左边有一个CONSTANT,编译器将捕获所有赋值运算符,因为你不能赋值给它。

许多语言(特别是C)在编写代码时具有很大的灵活性。虽然左边的常数对你来说似乎很不寻常,但你也可以将赋值和条件一起编程为,

if (var1 = (var2 & var3)) { /* do something */ }

如果结果为true,此代码将布尔结果输入var1并且/ *执行某些操作* /。

相关的编码实践是避免编写条件表达式在其中具有赋值的代码;虽然编程语言允许这样的事情。你没有遇到过这样的代码,因为条件中的赋值是不寻常的,所以典型的代码没有这样的东西。

IBM DeveloperWorks网站上有一篇很好的C语言编码实践文章,该文章可能仍然适合以该语言撰写的人。