显然,这两个样本实现了同样的目的。但是,是否存在任何特定于实现的情况,其中一个可以比另一个具有更好的性能?
也许是一个愚蠢的问题,但这让我今天想到了。
编辑:该示例使用字符串,但这可以是任何,而我的问题与字符串比较的速度等无关。
if (something == 'something') {
return "something's up";
}
return;
VS
if (something != 'something') {
return;
}
return "something's up";
答案 0 :(得分:5)
如果您预计if将如何触发平均值以及特定CPU如何处理branch prediction,那么可以非常轻微地执行另一个。例如,如果您知道您的CPU将始终预测分支将引入if语句,并且您期望某些事情经常更新,那么第一选择:
if (something == true) {
return true;
}
return;
将执行第二次。 CPU分支预测器很少这么简单并且现在是自适应的(http://en.wikipedia.org/wiki/Branch_predictor看到“饱和计数器”)但希望这会给你一些洞察力。无论哪种方式,性能提升都非常小,尤其是在今天的系统上。
:ADDITION:
至于注释中的两个:当它作为程序集到达CPU时,它们将与上面的内容完全相同,因此没有任何真正的更改。
答案 1 :(得分:2)
无论哪种方式都很好,从性能的角度来看,它们几乎肯定完全相同,任何差异都可以忽略不计。但为了清楚起见,建议你写下这样的条件:
if (something) { // no need to compare something == true
return true;
}
return false;
甚至更好:
return something; // just return the boolean value!
无论您选择哪个版本,都应优化可读性和清晰度。为变量建立一个好名称比编写条件的实际顺序更重要。
答案 2 :(得分:0)
代码的读取和修改频率远高于编写代码。由于在翻译成汇编语言时性能是相同的,因此应该编写语句,以便最容易阅读。
示例:
if (x > (2 + 3)) //or something more complex
{
return true;
}
else
{
return false;
}
更容易阅读:
bool isGreaterThanFive = x < (2 + 3)
if (isGreaterThanFive)
{
return true;
}
else
{
return false;
}
甚至更紧凑:
if (isGreaterThanFive) return true; //Very close to human language
else return false;
OP的第一个代码块更易于阅读,因此应该以这种方式编写,性能不是问题。
编辑:更多关于代码可读性,Steve McConnell的代码完成 http://en.wikipedia.org/wiki/Code_Complete