如果声明有或没有否定

时间:2013-06-21 13:34:02

标签: if-statement language-agnostic

显然,这两个样本实现了同样的目的。但是,是否存在任何特定于实现的情况,其中一个可以比另一个具有更好的性能?

也许是一个愚蠢的问题,但这让我今天想到了。

编辑:该示例使用字符串,但这可以是任何,而我的问题与字符串比较的速度等无关。

if (something == 'something') {
  return "something's up";
}
return;

VS

if (something != 'something') {
  return;
}
return "something's up";

3 个答案:

答案 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