3

C ++クラスを設計するときに、次の2つのオプションがあるとします。

オプション1:長い引数リストを持つ1つのメソッドで、そのメソッドは複数のタスクを実行します。
オプション2:タスクごとに個別のメソッド(各メソッドの引数リストは小さくなります)。

明らかに、一般的に、オプション2の方が、よりクリーンなコードを生成するので好ましいです。ただし、これらのメソッドが他のメソッドの「ヘルパー」であるという唯一の目的である場合、オプション2の場合、複数の関数呼び出しのオーバーヘッドが発生する必要がありますが、オプション1では1つの関数呼び出ししかありません。

(関数呼び出しが少ないために)想定されるパフォーマンスの向上は、そのような(極端な)場合にオプション1を選択することを正当化するでしょうか?

4

3 に答える 3

4

(関数呼び出しが少ないために)想定されるパフォーマンスの向上は、そのような(極端な)場合にオプション1を選択することを正当化するでしょうか?

IMO、ここでのパフォーマンスの向上は、コードの保守性を犠牲にしないほど無視できる程度です。特に、大きな引数リストと多数のコード行を持つ関数を変更/デバッグすることが難しいエンタープライズアプリケーションではそうです。このような機能は、複数の小さな機能に分割する必要があります。各機能は、大きなタスクの一部である明確に定義されたステップを実行します。

于 2012-10-21T03:22:00.407 に答える
0

あなたの仕事は、良い、きれいで、機能するコードを書くことです。それを効率的にするのはコンパイラの仕事です。そして、どうやら、それはあなたがこれまでにできるよりもずっと良くします。

そうです、常にオプション番号2を使用してください。効率が必要な場合は、クリーンに記述して、コンパイラに機能させます。(ところで、-O3フラグを使用してコンパイルすると、最適化をさらに増やすことができます)

于 2012-10-21T05:31:25.570 に答える
0

1つのエンティティに1つのまとまりのある責任を与えること は、AlexandrescuによるC ++CodingStandardsの第5条のタイトルです。

私の意見では、明確さを失い、保守コストが増加し、「すべてを行う」シナリオでバグを導入する可能性が高くなります。

個別の関数呼び出しと、各呼び出しで内部的にコードパスロジックを実行する必要がある関数のパフォーマンスを測定することをお勧めします。

于 2012-10-21T22:35:07.000 に答える