web-dev-qa-db-ja.com

関数の出力を確認するために新しい変数を作成することは良い習慣ですか?

次の2種類の実装を検討してください。

public int add(int x, int y) {
    return mysteriousAdd(x, y);
}


public int add(int x, int y) {
    int output = mysteriousAdd(x, y);
    return output;
}

私の同僚は、デバッグ中にmysteriousAddが返す変数を確認できるため、2番目の実装の方が優れていると言っています。スタックに追加の変数を作成するのはそれほどオーバーヘッドではありません。今日のほとんどのコンパイラーは、追加の変数なしでデバッグ中に関数の応答を示すことができ、スタックでの追加の変数の作成も回避しているため、最初の実装の方が適切であり、彼のポイントはそれほど有効ではないと思います。

スタックでの参照変数の作成は安価な操作ですか?上記の2つの方法のうち、コーディングに適しているのはどれですか。その理由は何ですか。

8
kai

そのような2つの関数のAssembly/bytecode/IL/etc出力を比較すると、両方が同じであることがわかります。ブッシュリーグのコンパイラ以外はすべて、余分な値を最適化します。

したがって、パフォーマンス/メモリに関する考慮事項はすべて破棄する必要があります。

つまり、読みやすさについて選択します。この例では、戻る前に戻り値を識別する値は実際にはありません。ただし、20行の計算などの最下部にいる場合は、返される前に名前付きの値を作成することは価値があることがよくあります。その名前は、計算が何をもたらすかについての情報を読者に示すことができるためです。

16
whatsisname

プログラミング環境で、変数なしで関数呼び出しの結果を読み取ることができることを示します正確に簡単一時変数なし。私はかなり良いコーディング環境だと思っているものを使用していますが、それはできません。

だからそれを実証する。可能であれば、同僚は何かを学びました。できない場合は、何かを学びました。

1
gnasher729