如果Else vs&& ||

时间:2015-11-20 15:44:43

标签: javascript c++ if-statement

使用if else或&&编码之间是否存在差异?和||运算符。

例如在if-else样式中我可以编写此代码

for( var i = 0; i < 1000000000; i ++ ) {
    if( i % 2 == 0 ) {
        f1();
    } else {
        f2();
    }
}

并且在&amp;&amp;和||样式我可以使用此代码获得相同的结果

(( i % 2 == 0 ) && (test1() || true)) || test2();

我在JS中测试它们,它们大约在同一时间工作,但我没有在C ++上测试它们。也许它取决于编译器或语言。

有速度差吗?还是有什么不同?

谢谢

3 个答案:

答案 0 :(得分:6)

它可能会起作用,但您可能想要考虑的一件事是可读性。你的代码的第一个实例是非常易读的,而第二个实例让我想要拿笔和纸做数学。速度和可读性是权衡取舍,除非你的程序在性能方面严重瓶颈,否则可读性是更好的目标。

答案 1 :(得分:4)

您显然对if方法更为自在,因为替代方案中有许多冗余括号。

除非性能有很大差异(在这种情况下它没有),否则以50%的能力编程,这样你就可以100%调试。

即。采用你更满意的方法,找到更多的可读性。

答案 2 :(得分:4)

此表达式的问题是

(test1() || true)

是例如函数test1可以返回类型void或者没有隐式转换为类型bool的类型的对象,例如类类型的对象没有合适的转换运算符。

这条记录只会让读者感到困惑。

编程KISS中有这样一个原则 - 保持简单愚蠢。:)

从第一个代码片段可以看出,程序员的意图是调用其中一个函数。

查看第二个代码片段,似乎程序员将评估复合逻辑表达式。所以这段代码只会产生问题。

如果表达式是

,它将更具可读性
i % 2 == 0 ? ( void )test1() : ( void )test2();

当然,在JavaScript中,您可以在不使用void

的情况下编写表达式
i % 2 == 0 ? test1() : test2();

这是对C ++的重新定位。