IF语句中的括号有什么区别


whats the difference in parentheses in IF statements?

我在与PHP和javascript打交道时注意到,顺便说一句,仍然在学习,以下似乎产生了相同的结果。

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

编程中的专有术语是什么,以便我可以了解更多信息。

括号确定进行比较的顺序。 你的例子很简单,根本不需要括号,但看看这样的东西

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

这实际上相当于

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

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

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

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

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

由于运算符优先级规则,这两行是相同的。

==优先于

&&运算符。

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

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

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

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

例:

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

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

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

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)

在某种程度上,这使得代码看起来更干净一些,并保证首先评估比较。

它被称为运算符优先级

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

括号用于

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

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

我希望这能让你更清楚这一点。 祝你有美好的一天。

如果要同时检查这两个条件,则应组合这两个参数,但是通过使用两个不同的括号集来分隔它们,您将检查 if 语句内每个循环的每个条件。