比较项目的顺序?
我已经看到了这一点,但从来没有听清楚为什么......这真的适用于任何语言,不只是C#或VB.NET或Perl或其他。比较项目的顺序?
比较两个项目时,有时“检查”值放在左侧而不是右侧。在逻辑上,我首先列出你的变量,然后列出你正在比较的值。但我看到了相反的情况,其中“常数”列在第一位。
这种方法有什么(如果有的话)收益?
所以不是:
if (myValue > 0)
我看到:
if (0 < myValue)
或
if (Object.GimmeAnotherObject() != null)
被替换为:
if (null != Object.GimmeAnotherObject())
对此有何想法?
TIA! Kevin
一些开发商提上不断离开,像这样
if(0 = myValue)
这是因为你会从编译器得到一个错误,因为你不能分配值0。取而代之的是,你必须将其更改为
if(0 == myValue)
这可以防止出现痛苦的调试的道路,因为打字
if(myValue = 0)
是完全合法的,但最有可能你的意思
if(myValue == 0)
第一选择不是你想要的。它会巧妙地改变你的程序并导致各种头痛。希望澄清!
请记住,在许多较新的语言中,如果(myValue = 0)不是有效的代码,因为myValue = 0会计算一个数字,if ()不适用于一个数字作为条件 – 2009-06-16 11:43:48
@David欢迎来到伪代码的世界:) – samoz 2009-06-16 11:44:28
我不认为像一个简单的规则,但恒定的第一或最后不变是不是一个非常聪明的选择。我相信支票应该表达它的语义。例如,我更喜欢在范围检查中使用这两个版本。
if ((low <= value) && (value <= high))
{
DoStuff(value);
}
但我同意你提到的例子 - 我会但不变的最后,并且可以看到没有任何理由以另一种方式做它。
if (object != null)
{
DoStuff(object);
}
在C++中这两种都是有效的,并编译
if(x == 1)
和
if(x=1)
,但如果你把它写这样
if(1==x)
和
if(1=x)
然后分配给1被捕获并且代码不会被编译。
把const变量放在左边是比较安全的。
一旦你进入把const的变量在左边的赋值它往往成为操作的默认模式的习惯,这就是为什么你看到它显示在平等的检查,以及
它的编码实践例如,输入'='等类型为'='的拼写错误。
如果左边有一个CONSTANT,则编译器会捕获所有赋值运算符,因为您无法将其分配给常量。
许多语言(特别是C
)在编写代码时有很大的灵活性。同时,左边的常量似乎是不寻常的话,你也可以计划的任务和条件在一起,
if (var1 = (var2 & var3)) { /* do something */ }
此代码将获得布尔结果为var1
也/ *做某事* /如果结果是真正。
相关的编码习惯是避免编写代码,其中条件表达式具有分配内容;尽管编程语言允许这样的事情。你不会遇到这样的代码很多,因为在条件内的分配是不寻常的,所以典型的代码没有这样的事情。
在IBM DeveloperWorks网站上有一个很好的C
语言编码实践文章,可能仍然与用该语言编写的人相关。
对于.NET,这是无关紧要的,因为编译器不会让你做出像条件的任务:
if(x=1)
因为(其他人说的)这是不好的做法(因为它很容易错过)。
一旦您不必担心这个问题,首先将变量放在第一位,然后再将值放在第二位,但这是唯一的区别 - 双方都需要进行评估。
我认为它是特定于C语言的,或者是语句中带有赋值语句特定的 – Paco 2009-06-16 11:45:03