1

我已经看到了这个,但从来没有听到过关于为什么的明确解释......这真的适用于任何语言,而不仅仅是 C# 或 VB.NET 或 Perl 或其他任何语言。

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

这种方法有什么(如果有的话)收益?

所以而不是:

if (myValue > 0)

我见过:

if (0 < myValue)

或者

if (Object.GimmeAnotherObject() != null)

替换为:

if (null != Object.GimmeAnotherObject())

对此有什么想法吗?

蒂亚!凯文

4

5 回答 5

8

一些开发人员将常量放在左侧

if(0 = myValue)

这是因为你会从编译器中得到一个错误,因为你不能给 0 赋值。相反,您必须将其更改为

if(0 == myValue)

这可以防止许多痛苦的调试,因为输入

if(myValue = 0)

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

if(myValue == 0)

第一个选择不是你想要的。它会巧妙地改变你的程序并引起各种头痛。希望澄清!

于 2009-06-16T11:38:21.840 回答
2

我不认为一个简单的规则,比如but the constant first or but the constant last 不是一个非常聪明的选择。我相信支票应该表达它的语义。例如,我更喜欢在范围检查中使用这两个版本。

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

但我同意你提到的例子——我会坚持最后一个,并且看不出以另一种方式这样做的明显理由。

if (object != null)
{
    DoStuff(object);
}
于 2009-06-16T11:38:16.770 回答
2

在 C++ 中,这两个都是有效的并且可以编译

if(x == 1)

if(x=1)

但是如果你这样写

if(1==x)

if(1=x)

然后对 1 的赋值被捕获并且代码不会编译。

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

一旦养成将 const 变量放在左侧进行赋值的习惯,它往往会成为您的默认操作模式,这就是为什么您会在相等检查中看到它的原因

于 2009-06-16T11:38:32.043 回答
2

对于 .Net,这无关紧要,因为编译器不会让您在以下条件下进行赋值:

if(x=1)

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

一旦您不必担心这一点,将变量放在第一位然后将值放在第二位会更易读,但这是唯一的区别 - 双方都需要评估。

于 2010-09-14T10:16:28.303 回答
1

例如,它是一种编码实践来捕捉像 '!=' 这样键入为 '=' 的错别字。

如果左侧有一个 CONSTANT,则编译器将捕获所有赋值运算符,因为您无法分配给常量。

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

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

如果结果为真,此代码会将布尔结果输入var1并 /* 做某事 */。

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

IBM DeveloperWorks站点上有一篇很好的C语言编码实践文章,可能仍然与使用该语言编写的人相关。

于 2009-06-16T11:44:51.000 回答