私はこれを推測します:
public static string abc()
{
return "abc";
}
この関数を次のように呼び出すことをお勧めします。
string call = abc();
Console.writeline(call);
これより?
console.writeline(abc());
どちらかを優先する理由はありますか?
私はこれを推測します:
public static string abc()
{
return "abc";
}
この関数を次のように呼び出すことをお勧めします。
string call = abc();
Console.writeline(call);
これより?
console.writeline(abc());
どちらかを優先する理由はありますか?
どちらも有効です。ただし、経験から、最初のオプションが読みやすさと保守の容易さの点でより適していると結論付けました。デバッグセッションの助けとして、「コンパクト」スタイルから最初のスタイルに変更した回数は数え切れません。
たとえば、このスタイルを使用すると、中間結果の中間の正確性を簡単に確認できます。
string call = abc();
assert(!call.empty()); // Just an example.
Console.writeline(call);
また、後でコードをより堅牢にするのに役立ちます。たとえば、前のアサートの条件が保持されることを設計が保証していないが、それでもチェックする必要がある場合など、呼び出しの値をチェックする後続のアクションの前に条件付きチェックを追加します。
string call = abc();
if (!call.empty())
{
Console.writeline(call);
}
また、このスタイルを使用するとcall
、デバッガーで の値を簡単に調べることができることに注意してください。
正確な例(1つのパラメーター、他の場所で使用されていない値、副作用なし)を考えると、それは単なるスタイルの問題です。ただし、複数のパラメーターがあり、メソッドに副作用がある場合は、さらに興味深いものになります。例えば:
int counter;
int Inc() { counter += 1; return counter }
void Foo(int a, int b) { Console.WriteLine(a + " " + b); }
void Bar()
{
Foo(Inc(), Inc());
}
ここに何Foo
を印刷しますか?言語によっては、予測可能な結果さえない場合があります。この状況では、最初に変数に値を代入すると、コンパイラ (言語によって異なります) が予測可能な順序で呼び出しを評価するようになります。
実際、エラーチェックがなければ違いはわかりません。
これは違いを生むでしょう
string call = abc();
# if call is not empty
{
Console.writeline(call);
}
上記の方法により、空の文字列が書き込まれるのを回避できます。