使用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 ++上测试它们。也许它取决于编译器或语言。
有速度差吗?还是有什么不同?
谢谢
答案 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 ++的重新定位。