9

些細なことですが、他の方のご意見をお聞かせいただければ幸いです。

以下の 2 つのコード セグメントのうち、最適なプログラミング方法はどれですか?

var results = GetResults();

SendResults(results);

また:

SendResults(GetResults());

最初のオプションの方が優れていると思いますが、一方でオプション 2 は書く (そして読む) コードが少なくなります。どう思いますか?

非常に基本的な質問であることは承知していますが、それでも...

4

12 に答える 12

9

GetResultsとの呼び出しの間にブレークポイントを挿入できるため、通常は最初のオプションを選択しますSendResults

コードがメソッドの途中にある場合、通常はそれほど大きな問題ではありませんが、次の形式の場合:

 return Process(GetData());

GetDataと呼び出しの両方の戻り値はProcessすぐにはわかりません。副作用がなく、明らかな結果が得られるフレームワーク関数 (int.Parse など) について話している場合を除き、私は次の形式を好みます。

var data = GetData();
var result = Process(data);
return result;
于 2013-08-15T10:04:08.730 に答える
4

私の意見では、常に明確にするために努力する必要があるため、次のことをお勧めします。

// notice the type not var (unless it's obvious)
IEnumerable<MyClass> results = GetResults();

SendResults(results);
于 2013-08-15T10:04:13.450 に答える
1

このような問題に対処するときの最初の原則は、読みやすさです (低レベルの最適化を扱わない場合)。あなたの単純な例では、読みやすさは同等ですが、次のようなコードを検討してください。

SendResults(GetResults(Sorter, context.GetCurrentPageInfo(userContext), ...);

確かに、より明確になるでしょう:

var results = GetResults();
var pageInfo = context.GetCurrentPageInfo(userContext);
...
SendResults(results, pageInfo, ...);

他の回答で正しく指摘されているように、読みやすいバージョンにはもう 1 つの利点があります。すべての中間値を調べることができるため、デバッグが容易です。

于 2013-08-15T10:04:59.610 に答える
1

個人的には、少なくともデバッグ中に GetResults() の結果を調べることができる最初のものを好みます。

プログラミングの練習とは何の関係もないと思いますが、より個人的なスタイルです。

于 2013-08-15T10:05:33.693 に答える
1
var results = GetResults();
SendResults(results);

の値を検査するためにブレークポイントを使用できるため、許容されますresults。一部のプログラミング言語はこのコードを最適化しません。その結果、コード インスペクションで、変数resultsが変更されていないという警告が発行される場合があります。C#おそらく最適化されるので問題ありません。

コード インスペクターは、次の例の非効率的なコードに対して警告を発行する場合があります。

 var results = GetResults();
 return results;

C#言語にもよりますが、最適化に問題はないと思います。

于 2013-08-15T10:08:17.387 に答える
0

結果がこのように使用される場合、私はおそらく別の解決策に行きます:

class SomeClass
{
    private MyClass _results;
}

private void SendResults()
{
   ... // Implementation which sets _results

SendResults は _results から直接結果を取得し、GetResults は必要ありません (他のクラスで使用されない限り、次のようになります)。

public MyClass Results { get; private set; }
于 2013-08-15T10:09:54.577 に答える
0

他の場所で結果が必要ない場合は、2 番目のオプションの方が優れているというのが私の意見です。読み取りが速くなり、実際に記述するコードが少なくなります。ただし、読みにくいため、コードを読んでいるプログラマーはより優れており、物事をより早く理解する必要があります。

于 2013-08-15T10:06:16.557 に答える
-1

私の意見では、それは大した問題ではありませんが、最初の方が少し読みやすく、拡張と保守が少し簡単になるため、最初の方が少し好みです。私の意見では、一貫性がはるかに重要です。どちらか一方を実行しますが、両方は実行しないでください。

于 2013-08-15T10:04:28.693 に答える
-1

両方とも問題ありません...それはあなたのプログラミングスタイルと経験の問題です...しかし、私が選択しなければならない場合は、オプション1を使用します.より明確に...

于 2013-08-15T10:04:40.023 に答える