0

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

也许是一个愚蠢的问题,但这让我今天开始思考。

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

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

对比

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

3 回答 3

5

如果您预计 if 将如何平均触发以及您的特定 CPU 如何处理分支预测,则其中一个可能会略微优于另一个。例如,如果您知道您的 CPU 将始终预测分支将导致 if 语句,并且您希望某些东西经常等于 true,那么第一个选择:

if (something == true) {
  return true;
}
return;

将执行第二个。CPU 分支预测器很少这么简单并且现在是自适应的(http://en.wikipedia.org/wiki/Branch_predictor参见“饱和计数器”),但希望这能给您一些见解。无论哪种方式,性能提升都非常小,尤其是在当今的系统上。

:添加:

至于评论中的两个:当它作为组件到达 CPU 时,它们将与您上面所拥有的完全相同,因此没有什么真正改变。

于 2013-06-21T13:39:52.957 回答
2

无论哪种方式都很好,从性能的角度来看,它们几乎可以肯定是相同的,任何差异都可以忽略不计。但为了清楚起见,建议您编写如下条件:

if (something) {  // no need to compare something == true
  return true;
}
return false;

甚至更好:

return something; // just return the boolean value!

无论您选择哪个版本,都应该优化可读性和清晰性。为变量起一个好名字比编写条件的实际顺序更重要。

于 2013-06-21T13:44:26.333 回答
0

阅读和修改代码的次数比编写代码的次数要多得多。由于翻译成汇编语言时性能相同,因此应该编写 if 语句,这样它最容易阅读。

例子 :

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 编写的 Code Complete http://en.wikipedia.org/wiki/Code_Complete

于 2013-06-21T14:00:28.450 回答