我已经看过这个,但从未听说过为什么......这真的适用于任何语言,不仅仅是C#或VB.NET或Perl等等。
比较两个项目时,有时“检查”值放在左侧而不是右侧。从逻辑上讲,您首先列出变量,然后列出您要比较的值。但我已经看到了相反的情况,首先列出了“常数”。
这种方法有哪些(如果有的话)增益?
所以而不是:
if (myValue > 0)
我见过:
if (0 < myValue)
或
if (Object.GimmeAnotherObject() != null)
替换为:
if (null != Object.GimmeAnotherObject())
有关于此的任何想法吗?
TIA! 凯文
答案 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
语言编码实践文章,该文章可能仍然适合以该语言撰写的人。