如果否则 vs && ||

If Else vs && ||

本文关键字:vs 如果      更新时间:2023-10-16

使用 if else 或 && 和 || 运算符编码之间有区别吗?

例如,在if-else风格中,我可以编写此代码

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

在 && 和 || 风格中,我可以使用此代码获得相同的结果

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

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

有速度差异吗?还是有什么区别?

谢谢

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

您显然对if方法更满意,因为替代方案中有许多多余的括号。

除非性能差异很大(在这种情况下没有(,否则请以 50% 的能力进行编程,以便您可以 100% 进行调试。

即采用您更满意并发现更具可读性的方法。

这个表达式的问题是

(test1() || true)

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

而这条记录只会让代码的读者感到困惑。

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

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

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

如果编写表达式会更具可读性

i % 2 == 0 ? ( void )test1() : ( void )test2();

当然,在 JavaScript 中,您可以在不使用void的情况下编写表达式

i % 2 == 0 ? test1() : test2();

这是对C++的要求。