【问题标题】:What is the preferred order for operands in boolean expressions?布尔表达式中操作数的首选顺序是什么?
【发布时间】:2011-01-16 10:31:24
【问题描述】:

结构化布尔表达式有什么好处,例如:

if (0 < x) { ... }

而不是

if (x > 0) { ... }

我一直使用第二种方法,总是将变量作为第一个操作数并使用任何有意义的布尔运算符,但最近我阅读了使用第一种方法的代码,在克服了最初的怪异之后,我开始更喜欢它。

现在我已经开始编写我所有的布尔表达式,只使用&lt;&lt;=,即使这意味着变量不是第一个操作数,就像上面的例子一样。对我来说,它似乎增加了可读性,但那可能只是我 :)

其他人对此有何看法?

【问题讨论】:

    标签: boolean conditional-operator


    【解决方案1】:

    对于您要比较的任何表达,做最自然的事情。

    如果您想了解其他操作(例如 ==),之前的主题会比较这些比较的操作数的顺序(以及原因)。

    【讨论】:

    • @sadboy:我发现x&gt;0 更具可读性,其他人可能会发现0&lt;x 更具可读性,这些简单的表达方式完全是主观的。
    • 我的意思是,就像你说的那样,这完全是主观的,所以在任何上下文或情况下,如果某些东西流动或读起来更清晰,那就去吧。
    【解决方案2】:

    这样做主要是为了避免在if 条件下使用= 而不是== 的问题。为了保持一致性,许多人也对其他运营商使用相同的方式。我认为这样做没有任何问题。

    【讨论】:

      【解决方案3】:

      使用最好的“阅读”。我要指出的一件事是,如果我正在测试一个值是否在界限内,我会尝试将其编写为使界限在“外部”,就像它们可能在数学表达式中一样:

      所以,要测试 (0

       if ((0 < x) && (x <= 10)) { ... }
      

      而不是

       if ((0 < x) && (10 >= x)) { ... }
      

       if ((x > 0) && (10 >= x)) { ... }
      

      我发现这种模式更容易遵循逻辑。

      【讨论】:

        【解决方案4】:

        将数字放在第一位的一个好处是它可以防止在需要 == 时使用 = 的错误。

        if ( 0 == x ) // ok
        if ( 0 = x )  //is a compiler error
        

        比较细微的错误:

        if ( x = 0 )  // assignment and not comparison. most likely a typo
        

        【讨论】:

        • 大多数编译器(例如gcc -Wall)应该有if (x = 0)的警告。
        【解决方案5】:

        说实话,用右侧的变量编写表达式是不寻常的,并且这种不寻常的直接后果是可读性受到影响。编码约定仅仅因为是约定而具有内在价值;人们习惯于以特定的标准方式编写代码,x &gt;= 0 就是一个例子。应避免不必要地偏离此类简单规范。

        您必须“克服最初的怪异”这一事实可能是一个危险信号。

        我不会写0 &lt; x,就像我不会在Java 中使用匈牙利符号一样。在罗马做到入乡随俗。罗马人写x &gt;= 0。不,这不是什么大不了的事,这似乎是一个不必要的小怪癖。

        【讨论】:

          猜你喜欢
          • 2011-01-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-21
          • 2021-12-28
          • 2016-01-13
          • 2018-06-06
          • 1970-01-01
          相关资源
          最近更新 更多