代码之家  ›  专栏  ›  技术社区  ›  LuRsT

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

  •  0
  • LuRsT  · 技术社区  · 16 年前

    把常数放在什么地方是最好的?左侧还是右侧?

    我个人在右侧使用:

    if($value > 23)
    {
    }
    
    8 回复  |  直到 16 年前
        1
  •  4
  •   Otávio Décio    16 年前

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

        2
  •  5
  •   annakata    16 年前

    很多人会说lhs,因为它会阻止你做一些微妙和有害的事情,比如 if (foo = KBAR) (注意缺少“==”)但是我总是发现为了可读性而出现的不和谐。

        3
  •  2
  •   Peter Miehle    16 年前

    取决于:

    如果(23<=i和i<=40)

    但我更喜欢右边,它读起来更自然。

        4
  •  1
  •   Alnitak    16 年前

    把条件放在右边,因为这是“自然”的地方,如果你不小心使用了,就要依靠你的编译器来生成一个警告。 = 而不是 == .

        5
  •  1
  •   Community kfsone    7 年前

    这真的很重要吗?如果你保持 约定,但究竟是将常量放在一边,还是始终使用<、<=运算符并避免使用>、>=;这取决于您自己。

    当然,编译器/解释器并不重要,现代编译器应该在意外地写“set to”(=)而不是“does it equal”(==)时给出明确的警告,如中所述。 ocdecio's post .

        6
  •  1
  •   Community kfsone    7 年前

    答案一如既往地是“视情况而定”。在大多数情况下,把它放在右边读起来更自然,就像在OP的例子中一样。在其他情况下,尤其是检查某个内容是否在范围内的复合语句(请参见 Peter Miehle 例如),它可以走任何一条路。我认为您应该使用任何使语句更清楚的语句,任何未来的程序员发生在您的代码中。如果可读性没有明显的区别,我建议默认将其放在右边,因为这是大多数人所期望的(最不意外的原则)。正如许多人已经提到的,如果您试图在if语句中执行赋值,现在任何一个合适的编译器都会警告您(您通常可以在赋值周围加上一组括号来消除此警告)。另外,有人提到,如果没有左边的常量技巧,某些JIT或解释语言可能会使您很难找到这个问题,但是IIRC,在这种情况下,其中许多语言也会发出警告,因此,如果在运行它们时将警告视为错误,它将帮助您捕获该问题。

        7
  •  0
  •   Aron Rotteveel    16 年前

    我喜欢左侧,因为这样可以防止意外的任务:

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

    注: 通过阅读我理解的其他答案,当使用编译语言时,这可能会给你带来麻烦。我还是喜欢使用这个,因为我的主要语言是PHP。对于编译语言,请参考其他人已经给出的答案。

        8
  •  0
  •   High Performance Mark    16 年前

    请始终使用<(和<=),不要使用>(或>=),并避免使用无法区分赋值和相等的语言。

    规则的第一部分意味着,在您的条件下,数字以它们通常的顺序出现,最小的在左边,最大的在右边。当您的条件包含多个条件时,这是一个很好的帮助( 3<x&x<=14)

    规则的第二部分意味着让编译器为编译器擅长的事情操心(例如,找出您键入的符号数)。

    我坚定地、肯定地、肯定地做出这些断言,因为我知道这只是我的观点,没有正确或错误的答案。

    当做