「Automobile」というクラスがあり、「myCar」というそのクラスのインスタンスがあるとします。メソッドが返す値を変数に入れる必要があるのはなぜですか?メソッドを呼び出さないのはなぜですか?
たとえば、なぜ次のように記述する必要がありますか。
string message = myCar.SpeedMessage();
Console.WriteLine(message);
の代わりに:
Console.WriteLine(myCar.SpeedMessage());
短い答え:ありません。どちらの例もまったく問題ありません。
とにかく一時的な変数を使用する理由は3つあります(最初の例のように)。
message
であることがわかりました)。ほとんどの言語では必要ありませんが、ゲッターを使用してメソッドに渡したい場合に便利です。
bar.doBaz(faa.getFoo())
しかし、特にそれが重要な関数である場合、呼び出しを分離することで読みやすさを向上させることができます
また、追加の行を犠牲にして呼び出しの水平フットプリントを削減します(新しい変数の名前が短い場合)
特にif
内の長い式や、コードを画面の右側から外す関数呼び出しを評価するときに、追加の変数が一般的な読みやすさを向上させる場合があります。
Java 5以降(および多くの同様の言語))では、追加の変数がnullポインター例外の原因を見つけるのに役立ちます。次のJavaを検討してくださいJavaの「オートボクシング」に依存してInteger
オブジェクトをint
プリミティブに変換するコード:
public int add(Integer firstIntObj, Integer secondIntObj) {
return firstIntObj + secondIntObj;
}
初期化されていない(null
)Integer
オブジェクトをプリミティブint
に変換すると、NullPointerExceptionがスローされますが、この例外は、2つの考えられる原因は同じ行にあります。次の例では、null
入力ごとに異なる行が表示されるため、例外の行番号は、どちらがnull
だったかを示します。
public int add(Integer firstIntObj, Integer secondIntObj) {
int first = firstIntObj;
int second = secondIntObj;
return first + second;
}
これを処理するためのより良い方法は、このメソッドを呼び出す誰かがソースコードを必要とせずに自分の問題を診断できるように、独自の説明的な例外をスローすることです。
public int add(Integer firstIntObj, Integer secondIntObj) {
if (firstIntObj == null) {
throw new IllegalArgumentException("First argument was null!");
}
if (secondIntObj == null) {
throw new IllegalArgumentException("Second argument was null!");
}
return firstIntObj + secondIntObj;
}
この手法は、複数の例外をスローする可能性のある行を分割するために使用できます。個別の変数を使用すると、説明的な例外をスローするよりもタイピングが少なくなります。すばやく簡単に行えます。
この場合は問題ではありませんが、より大きなシステムで作業している場合、次のような問題が発生する可能性があります。
square(getNum1(var1,var2[(param1+(param2%2))]),obj1.getNum2(((ptr1+dynamicOffset1)+5)(getMult(NULL))))