将常数置于某个条件下的最佳位置在哪里?

时间:2009-01-19 16:04:10

标签: language-agnostic

将常数置于某个条件下的最佳位置在哪里?左侧还是右侧?

我个人在右侧使用:

if($value > 23)
{
}

8 个答案:

答案 0 :(得分:5)

很多人都会说LHS,因为它会阻止你做一些微妙的和破坏性的事情,比如if (foo = KBAR)(请注意缺少'=='),但我总觉得这很容易让人感到烦躁。

答案 1 :(得分:4)

右侧。左侧是C / C ++中的传统,因为人们有时会忘记并使用“=”而不是“==”并且将const放在左侧会导致编译错误。

答案 2 :(得分:2)

取决于:

if(23&lt; = i和i <= 40)

但我更喜欢右侧,它更自然地阅读

答案 3 :(得分:1)

将条件放在右侧,因为这是“自然”的地方,如果您不小心使用=而不是==,请依靠编译器生成警告。

答案 4 :(得分:1)

真的重要吗?如果您保持 约定,它可能会有所帮助,但是它是将常量保持在一边,还是始终使用&lt;,&lt; =运算符并避免使用&gt;,&gt; = ;这真的取决于你。

对于编译器/解释器来说当然没关系,现代编译器应该在你不小心写“set to”(=)而不是“is it equal”(==)时给出一个明确的警告,如ocdecio's post

答案 5 :(得分:1)

答案一如既往地“取决于”。在大多数情况下,它更自然地将它放在右边,就像在OP的例子中那样。在其他情况下,特别是复合语句,检查某些事物是否在一个范围内(参见Peter Miehle的例子),它可以采用任何一种方式。我认为你应该使用任何一个使得声明更清晰的代码发生在代码中的任何未来程序员。如果可读性没有明显差异,我建议默认将其置于右侧,因为这是大多数人所期望的(最少惊喜的原则)。正如许多人已经提到的,如果你试图在if语句中执行赋值,现在任何体面的编译器都会发出警告(你通常可以通过在赋值周围添加一组额外的括号来使这个警告静音)。另外,有人提到一些JIT或解释型语言可能会在没有左侧不变的技巧的情况下很难找到这个问题,但是IIRC,其中许多也会在这种情况下发出警告,所以如果你运行他们将警告视为错误,它将帮助您解决问题。

答案 6 :(得分:0)

我更喜欢左侧,因为它可以防止意外分配:

// when using = instead of == this can result in accidental assignment
if ($value == null) {}

// $value cannot be accidentally assigned this way 
if (null === $value) {}

注意:从阅读其他答案我理解使用编译语言时,这可能会让您遇到麻烦。我仍然喜欢使用它,因为我的主要语言是PHP。对于编译语言,请参考其他人已经给出的答案。

答案 7 :(得分:0)

始终使用&lt; (和&lt; =),永远不要使用&gt; (或&gt; =),并避免使用无法区分赋值和相等的语言。

规则的第一部分意味着您的条件中的数字按通常顺序出现,左侧最小,右侧最大。当您的条件包含多个术语时,这是一个很好的帮助(例如 3&lt; x&amp;&amp; x&lt; = 14)

规则的第二部分意味着让编译器对编译器擅长的事情感到厌烦(例如发现你键入了多少个=====符号)。

我确信这些断言是强有力的,肯定的,并确定这只是我的意见,并且没有正确或错误的答案。

此致