【问题标题】:whats the difference in parentheses in IF statements?IF语句中括号的区别是什么?
【发布时间】:2012-08-16 18:37:48
【问题描述】:

我在处理 PHP 和 javascript(仍在学习 btw)时注意到,以下似乎产生了相同的结果。

        if( ( $A==0 ) && ( $B==0 ) ){}

        if( $A==0 && $B==0 ){}

这在编程中的正确术语是什么,以便我可以了解更多信息。

【问题讨论】:

  • 哇!你们真棒!感谢所有的答案!
  • 我也给你点赞。可悲的是,它只会帮助取消之前有人提出的问题:p
  • 谢谢!否决票让我有点困惑。
  • 你也应该知道这个词:short circuiting,这里也适用(如果你不知道的话)。

标签: php javascript


【解决方案1】:

括号确定进行比较的顺序。您的示例是一个非常简单的示例,根本不需要括号,但请看类似这样的内容

if ($a == 0 || $b == 0 && $c == 0 || $dd == 0)

这其实等价于

if ($a == 0 || ($b == 0 && $c == 0) || $dd == 0)

因为&& 在 PHP 中首先被评估,因为它的优先级高于 ||

在大多数情况下,当您有复杂的条件时,您希望确保使用括号,如果不是为了正确操作顺序,那么至少要让代码阅读器清楚您要做什么。

【讨论】:

  • 很好的答案,我也不知道 $$ || 的优先级,也谢谢你。
  • 完全同意,我们应该写括号以提高可读性。
【解决方案2】:

该术语称为运算符优先级。

http://php.net/manual/en/language.operators.precedence.php

【讨论】:

    【解决方案3】:

    由于Operator Precedence规则,这两行是一样的。

    == 优先于 && 运算符。

    额外的(不必要的)括号有时用于使陈述更清晰,有时是因为作者不知道优先级,或者由于voodoo programming

    【讨论】:

    • 为了让您的答案更好,我认为提及 short circuiting 也将有助于未来的 OP。
    • 很好的电话@Adam - 但我会把它留给你评论中的链接。
    【解决方案4】:

    操作顺序,正如@asawyer 所说。

    来源:http://en.wikipedia.org/wiki/Order_of_operations#Programming_languages

    【讨论】:

      【解决方案5】:

      在您的具体示例中没有区别,但是,在某些情况下 paranthethis 会产生很大的不同。

      例子:

      if(a == 0 && (b == 0 || c == 0)) {
          // do something
      }
      

      如果你注意到了,在这种情况下,在 o 中只有 3 个变量中的 2 个必须为 0

      【讨论】:

        【解决方案6】:

        您看到的是基于操作顺序的额外括号。括号用于覆盖通常的顺序。举个数学例子:

        7 + 2 * 4 + 3
        

        首先将 2 * 4 评估为 8,给出:

        7 + 8 + 3
        

        乘法的优先级高于加法,因此首先计算它。您可以使用括号覆盖它:

        (7 + 2) * 4 + 3
        

        在这种情况下,要评估的第一个操作是加法,给出:

        9 * 4 + 3
        

        if 语句中的按位、布尔和比较运算符的原理相同。比较运算的优先级高于布尔运算符,因此如果您有,例如:

        1 == 4 || 7 > 3
        

        将首先评估比较,给出

        false || true
        

        许多程序员习惯于“安全地”编程,在比较时用括号括起来:

        (1 == 4) || (7 > 3)
        

        在某种程度上,这使代码看起来更简洁,并保证首先评估比较。

        【讨论】:

          【解决方案7】:

          称为运算符优先级

          if( ( $A==0 ) && ( $B==0 ) ){}
          
          if( $A==0 && $B==0 ){}
          

          在您的示例中,两行的评估相同。基本上括号中的东西会首先被处理。当你有类似的东西时可以更好地注意到这一点:

           if( ( $A==0  && $C!= 1) && ( $B==0 || $D >0) ){}
          

          在上面的例子中。 内部条件( $A==0 && $C!= 1)( $B==0 || $D >0)首先被评估,然后根据主要&&符号评估结果。

          所以假设:

          ( $A==0  && $C!= 1) evaluated to TRUE
          

          ( $B==0 || $D >0) evaluated to FALSE
          

          条件

          if( ( $A==0  && $C!= 1) && ( $B==0 || $D >0) ){}
          

          变成

          if( ( TRUE) && ( FALSE) ){}
          

          最终结果自然为 FALSE

          【讨论】:

            【解决方案8】:

            括号用于处理多个&&|| 也称为andor。这很像数学,如果您有等式 2+4*2=10,这是因为您在加法之前进行了乘法运算。其中 (2+4)*2=12 因为括号让你做加法。

            所以简而言之,括号在 if 操作中具有最高优先级。

            我希望这会让你更清楚。祝你今天过得愉快。

            【讨论】:

              【解决方案9】:

              如果你想同时检查两个条件,你应该组合这两个参数,但是通过使用两个不同的括号集将它们分开,你正在检查 if 语句中每个循环的每个条件。

              【讨论】:

                猜你喜欢
                • 2013-08-29
                • 1970-01-01
                • 2012-03-31
                • 2014-09-30
                • 2017-10-05
                • 2011-04-08
                • 2015-02-13
                • 2021-04-16
                • 1970-01-01
                相关资源
                最近更新 更多