いもづる オブジェクト指向

仮引数には値を代入しない

仮引数へ値を代入するということは、変数を別の意味で使いまわすということです。

ここに、2つの値の平均を返す処理があったとします。

 1|    private decimal GetAverage(decimal value1, decimal value2){
 2|        value1 = (value1 + value2)/2;
 3|        Console.WriteLine(value1);
 4|
 5|        return value1;
 6|    }

処理結果は2値の平均で問題ありませんが、コーディングはどうでしょう?(そのまま返せば?というのはなしで・・)

2行目で value1 に平均を代入した時点で value1 は平均を表すことになります。 しかしこのメソッドでは、平均を求める元の2値の1つ目が value1 です。
のちに、平均を求めた後に引数に与えられた2値を使った何かの処理があった場合、value1 の値はもうありません。
のちに、別の人(自身でもOK)が改修をする際は、きっと宣言を見てその後処理を考えます。 平均値を value1 に入れている個所を見落とす可能性は大きいですし、気づいたとしても(大きなため息をついて)何らかの手を打つ必要があります。
さらに、平気で仮引数に値を代入するクセがある人は要注意!この引数が参照渡しだったときに大きな問題を起こしてしまうかもしれません。

面倒でもそれ用の変数を用意しましょう。

 1|    private decimal GetAverage2(decimal value1, decimal value2){
 2|        decimal average = (value1 + value2)/2;
 3|        Console.WriteLine(average);
 4|
 5|        return average;
 6|    }

間違い、混乱の可能性は1つでもつんでおくに越したことはありません。
渡されてきたものは渡されてきたもの。仮引数への代入はやめましょう。

変数と中身が一致しないと、意味のないところで悩み時間を浪費してしまいます。
 ⇒ 変数には意味のわかる名前を

 

webmaster@e-ioo.net