12

次のようなコードがあるとします。

public string SomeMethod(int Parameter)
{
  string TheString = "";

  TheString = SomeOtherMethod(Parameter);

  return TheString;
}

もちろん、このコードは次と同等です。

public string SomeMethod(int Parameter)
{
  return SomeOtherMethod(Parameter);
}

最初のバージョンの方が読みやすいと思います。回避できることがわかっているときに変数を使用しているとはいえ、それが私のコードの書き方です。私の質問は次のとおりです。コンパイラは同じ方法でコードをコンパイルしますか (つまり、同じパフォーマンス)、またはパフォーマンスの点で 2 番目のオプションが本当に優れていますか。

ありがとう。

4

3 に答える 3

20

最初の形式は読みにくく、冗長な初期化子が含まれている思います。別の値を与えようとしているのに、変数を "" に初期化するのはなぜですか? 少なくとも次のように変更します。

public string SomeMethod(int parameter)
{
  string returnValue = SomeOtherMethod(parameter);    
  return returnValue;
}

または、宣言を初期化から本当に分離したい場合:

public string SomeMethod(int parameter)
{
  string returnValue;
  returnValue = SomeOtherMethod(parameter);    
  return returnValue;
}

(また、.NET 命名規則に従い、より意味のある名前をローカル変数に与えるように名前を調整したことに注意してください。"TheString" は有用な意味を伝えません。)

ローカル変数を使用してもパフォーマンスの問題はまったく見られませんが、可読性について考えることを強くお勧めします。ここでのローカル変数の目的は何ですか? おそらく、メソッドを次のように説明するでしょう。「SomeOtherMethod指定されたパラメーターで呼び出した結果を返す」-その時点で、1行バージョンはまさにその説明を実装しています。

于 2012-04-07T12:25:09.723 に答える
13

コンパイラは、2 つの例に対して非常によく似たコードを生成します。ただし、使用しない空の文字列への初期化を回避するためのわずかな変更が 1 つあります。

public string SomeMethod(int Parameter)
{
    string result;
    result = SomeOtherMethod(Parameter);
    return result;
}

このようにコードを書き直しても読みやすくなるかどうかはわかりませんが、ブレークポイントを追加してresult、メソッドが戻る前に の値を確認できることは確かです。これは、デバッグ時に役立ちます。

最初の行と 2 番目の行を組み合わせても、この利点が得られることに注意してください。

public string SomeMethod(int Parameter)
{
    string result = SomeOtherMethod(Parameter);
    return result;
}

この最後のバージョンは非常に読みやすく、デバッグも簡単だと思います。

于 2012-04-07T12:24:39.177 に答える
4

回答は既に投稿されていますが、別の試みをさせてください:

あなたが探している3つのことがあります:

読みやすさ、パフォーマンス、有用性 (デバッグ、ロギングなど)

1.読みやすさはやや相対的です。Eric Lippert / Jon Skeet がより読みやすいものを見つけると、同じことは私には当てはまりません。コードを書くほど、多くのことや視点がコードを見る方向に変わります。

あなたが与えた両方の選択肢は読みやすいです。私にとっては、2番目の方が読みやすいです。

2.パフォーマンス:最初の選択肢では、文字列を再初期化すると以前の名前がクリアされず(インターン)、新しい文字列が作成され、変数がそれを指すという文字列の不変性に気付くかもしれません。

したがって、パフォーマンスの観点から、変数を新しい値に (不必要に) 初期化すると、パフォーマンスのボトルネックが発生します。これも相対的なものであり、アプリケーションのサイズ/複雑さに依存します。このためには、2 番目のオプションを使用する必要があります。あなたの 2 番目のオプションとジョンの答えは、同じパフォーマンスになります。

3.デバッグの観点: このようなものを探している場合は、ローカル変数が必要です。

于 2012-04-08T06:05:22.963 に答える