哪个更有效率?
if(foo != 0)
{
bar += foo;
}
或
bar += foo;
假设foo有可能成为0(比如25%,但可以对百分比做出其他假设,显然0%意味着后者总是更有效率)
关于何时应该使用其中一个,或者人们做分析以确定实际更有效的表达方式,是否存在共识?
答案 0 :(得分:2)
对这么小的代码部分无法达成共识。有很多事情会严重影响性能,这些事情会根据围绕此if语句的代码的上下文而有所不同。
例如,如果你写:
onClick() {
var picker = this.picker.pickatime('picker');
picker.open().on({
set: (thingSet) => {
setTimeout(() => {
self.zeit = this.get();
});
}
});
}
if语句甚至不会出现在二进制结果中,因为编译器知道它总是为假。
关于0的检查,如果值很可能为0,则存在处理器启发式(称为分支预测),它自动检查过去if语句过去多少次(当它是in while / for loop)和"预测"声明的结果。
这个question显示了分支可能对代码性能产生的影响。
答案 1 :(得分:-1)
这不是真正必要的优化。 assembly
if(foo != 0)
转换为两个汇编指令
和bar += foo;
也转化为两个
所以我想说,如果我们还添加if语句完成的小分支,我认为只要将foo添加到bar就更好了,即使多次不影响条形值。
答案 2 :(得分:-1)
当然检查更有效率。假设有25%的几率为0,所以在100次完全机会调用时你会跳过编译该行25次。因此,在最佳情况下,您的复杂性会降低25%。