[英]if statement with or without negation
显然,这两个示例实现了相同的目的。 但是,在任何情况下,也许有特定于实现的情况,其中一种可能比另一种具有更好的性能?
也许这是一个愚蠢的问题,但这使我今天思考。
编辑:该示例使用字符串,但这可以是任何东西 ,我的问题与字符串比较的速度等无关。
if (something == 'something') {
return "something's up";
}
return;
与
if (something != 'something') {
return;
}
return "something's up";
如果您预计if将如何平均触发以及您的特定CPU如何处理分支预测 ,则一个人可能会在执行其他任务时表现非常差。 例如,如果您知道您的CPU将始终预测该分支将进入if语句,并且您希望某事经常等于真,那么第一种选择是:
if (something == true) {
return true;
}
return;
将执行第二。 CPU分支预测器很少这么简单,现在可以自适应( http://en.wikipedia.org/wiki/Branch_predictor参见“饱和计数器”),但希望这能给您一些启示。 无论哪种方式,性能提升都非常微小,尤其是在当今的系统上。
:加成:
至于注释中的两个:当它以组装的形式到达CPU时,它们将与您上面的内容完全相同,因此实际上没有任何变化。
无论哪种方式都很好,从性能的角度来看,它们几乎可以肯定是相同的,任何差异都可以忽略不计。 但为清楚起见,建议您编写如下条件:
if (something) { // no need to compare something == true
return true;
}
return false;
甚至更好:
return something; // just return the boolean value!
无论选择哪个版本,都应该针对可读性进行优化以提高清晰度。 给变量起一个好名字比写条件的实际顺序更重要。
与编写代码相比,读取和修改代码的频率更高。 由于翻译成汇编语言时的性能是相同的,因此应该编写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)的代码完成http://en.wikipedia.org/wiki/Code_Complete
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.