0

明らかに、これら 2 つのサンプルは同じことを達成します。しかし、おそらく実装固有のケースで、一方のパフォーマンスが他方よりも優れている可能性はありますか?

ばかげた質問かもしれませんが、これは今日考えさせられました。

編集:例では文字列を使用していますが、これは何でもかまいません。私の質問は、文字列比較の速さなどとは関係ありません.

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

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

3 に答える 3

5

if が平均してどのようにトリガーされるか、特定の CPU が分岐予測をどのように処理するかを予測すると、一方が他方をわずかに上回る可能性があります。たとえば、分岐が if ステートメントにつながると CPU が常に予測することがわかっていて、何かが true になることが多いと予想される場合、最初の選択肢は次のとおりです。

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

2番目に優れたパフォーマンスを発揮します。CPU 分岐予測子がこれほど単純であることはめったになく、現在は適応型です ( http://en.wikipedia.org/wiki/Branch_predictor「飽和カウンター」を参照)。いずれにせよ、特に今日のシステムでは、パフォーマンスの向上はごくわずかです。

:添加:

コメントの2つについては、アセンブリとして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 の最初のコード ブロックは読みやすいので、そのように記述する必要があります。パフォーマンスは問題になりません。

EDIT : コードの読みやすさについての詳細、Steve McConnell による Code Complete http://en.wikipedia.org/wiki/Code_Complete

于 2013-06-21T14:00:28.450 に答える