1

在搜索网站的源代码时,我找到了一种以if另一种方式(我认为)编写语句的方法。

代替:

if(a)b;

或者:

a?b:'';

我读:

!a||b;

第三种方式和前两种方式一样吗?如果是,为什么我们要使用第三种方式?

4

3 回答 3

4

第三种方式与前一种方式相同。使用它的一个论点是节省字节。反对使用它的一个强有力的论据是可读性。您最好在编写代码时关注可读性,并使用最小化器(例如Google Closure Compiler)来节省字节。

它可以更短:

a && b;
/*  !a||b  means:
 (not a) OR b
    which is equivalent to
 a AND b
    which turns out to be
 a && b
*/
于 2012-06-20T13:55:25.930 回答
4

欢迎来到短路评估的概念。这是在不同语言中使用的逻辑运算符的众所周知的属性。大多数情况下,这将用作适当的if或任何其他流控制语句中的子表达式,或者表达条件足够短,以便以这种方式保持可读性,或者通过自动转换来节省字节。

甚至还有关于这些问题的标签:

于 2012-06-20T14:00:37.287 回答
1

布尔表达式的结果有时可以在不评估所有子表达式的情况下进行评估。如果我们有A||B, 并且A是真的,那么甚至不需要评估B,因为无论如何结果都会是真的。这种行为称为“快捷布尔评估”,是大多数编程语言中的事实标准。它允许在if (i < A.length && A[i] == ...)不评估操作数的情况下编写表达式,如果值不正确A[i],可能会导致异常。i

在这种特殊情况下,!a||b与 相同if(a)b,是的,但是此类代码的可读性和可维护性是一个问题。

于 2012-06-20T14:03:54.087 回答