If statement 带或不带否定的if语句

If statement 带或不带否定的if语句,if-statement,language-agnostic,If Statement,Language Agnostic,显然,这两个示例实现了相同的功能。但是,是否存在一种可能比另一种性能更好的特定于实现的情况 也许是个愚蠢的问题,但这让我今天思考 编辑:示例使用字符串,但这可以是任何内容,我的问题与字符串比较的速度无关 if (something == 'something') { return "something's up"; } return; vs 如果您预测if的平均触发方式以及特定CPU的处理方式,那么其中一个的性能可能会比另一个稍差。例如,如果您知道您的CPU总是预测分支将引入if语句,并且

显然,这两个示例实现了相同的功能。但是,是否存在一种可能比另一种性能更好的特定于实现的情况

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

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

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


如果您预测if的平均触发方式以及特定CPU的处理方式,那么其中一个的性能可能会比另一个稍差。例如,如果您知道您的CPU总是预测分支将引入if语句,并且您期望某个值更经常地等于true,那么第一个选择:

if (something == true) {
  return true;
}
return;
将执行第二个。CPU分支预测器很少这么简单,现在是自适应的(请参阅“饱和计数器”),但希望这能给您一点启示。无论哪种方式,性能的提高都非常微小,特别是在今天的系统上

:添加:


至于注释中的这两个:当它作为组件到达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;
}
OP的第一个代码块si更易于阅读,因此应该以这种方式编写,性能不是问题

编辑:更多关于代码可读性的信息,Steve McConnell编写的代码完成

如果存在性能差异,则这是特定于语言的,不能作为一般情况回答。但是,无论如何,您不应该在这里进行任何性能差异,因为它在所有语言中几乎都不存在。首先写逻辑代码。如果(某物){}和
如果(!某物){}
呢?我理解这个问题;我是说,答案是如此依赖于实际情况,以致于没有结果。是的,分支预测是一件事,但在执行代码时是否使用它以及它是否对性能有任何影响是完全不同的主题。高级语言结构和低级处理器优化技术根本不一定相关。@finishingmove同时包含特定语言。很容易理解deceze的抱怨:你在问“鸟儿在飞吗?是还是不是?”大多数鸟儿确实在飞。同时,也有一些鸟类不这样做(例如企鹅和其他一些)。因此,以二进制方式回答一般性问题不会有多大用处。你自己的问题也是如此——在大多数语言上,你看不出有什么不同,但有一种是可以的。处理器也是如此。如果没有广泛的科学分析,你就无法回答哪一个。@finishingmove我不是在说语法。我所说的是,不同的语言可能在编译和运行时以不同的方式处理相同的代码(也称为伪代码)。有些LANG通常运行编译时优化,但有些LANG不运行编译时优化,以此类推,但很多现代人都有,这正是我所希望的答案。如果有人对这些问题有更深入的了解,我很想听听。阅读我关于编译器和汇编代码的帖子……这可能会带你到你需要的地方。很好的观点@om nom nom,但我会解决这个问题。它给了我一个很好的主意去哪里看。谢谢,但这是离题的。。。我很清楚你在说什么。
bool isGreaterThanFive = x < (2 + 3)

if (isGreaterThanFive)
{
    return true;
}
else
{
    return false;
}
if (isGreaterThanFive) return true; //Very close to human language
else return false;