sinProject流システム開発のススメ #004 早めのreturn

前回:sinProject流システム開発のススメ #003 コメントは最小限に

以前作成したcalcメソッドですが、新しい要求がきました。

「値が200の時だけ3倍して1を足しておいて。200位外のときは2倍して1を足しておいて」

さて、書いてみて下さい。たいていの方は以下の様なコードになると思います。

[code lang=”java” collapse=”true”] package net.sinproject;

public class Lesson {

/**
* 値が200なら3倍して1を足します。値が200以外なら2倍して1を足します。
* @param value もとの値
* @return 計算結果
*/
public static int calc(int value) {
int result = 0;

if (value == 200) {
result = value * 3 + 1;
}
else {
result = value * 2 + 1;
}

return result;
}

// …
}
[/code]

200の場合も200以外の場合も、一度計算結果をresultに入れて最後のreturn文で結果を返しています。200の場合はそれ以降処理が無いため、その場で結果を返したほうがシンプルです。そうするとresultという変数も要らなくなりそうです。「else」の処理も、わざわざ「else」ブロックを書かなくてもよくなりそうです。

if などの条件式では評価する値を左辺に、期待値を右辺に描くのが一般的ですが、sinProject流では逆になり、期待値を左に書きます。こうするとif文が少し長くなっても、期待値を先にすぐに判断することが出来ます。

これらを考慮してコードを書き換えてみましょう。

[code lang=”java” collapse=”true”] package net.sinproject;

public class Lesson {

// …
public static int calc(int value) {
if (200 == value) {
return (value * 3 + 1);
}

return (value * 2 + 1);
}

// …
}
[/code]

このようになりました。returnできるのであれば変数に値を格納せずに早めにreturnするようにします。そうすることでコードがシンプルになり、上下にスクロールして変数を眺めたり、結果を書き換えられるような心配もなくなります。また、elseブロックも排除することが出来ました。コードはインデントが深くなると見にくく理解しにくくなります。インデントを減らすためメソッド化したり処理を単純化したりする工夫を常に行うことが大切です。

この回で出てきた新しいコーディング規約も含めておさらいしておきます。

  • コードはシンプルに読みやすく。
  • return できるものは早めに return して結果を返す。
  • if  などの条件式では、期待値を左辺に書く。
  • インデントを減らす為にメソッド化したり処理を単純化したりする工夫を常に行う。
  • if ブロックの前後に空行を入れる。(ブロック開始、ブロック終了マークに隣接する場合を除く)
  • if/else を記述する場合、else 行は以前のifブロック終了マークと同じ行に書かずに次の行に記述する。

次回:sinProject流システム開発のススメ #005 メソッド、変数、定数の命名とメソッド抽出

Leave a comment

メールアドレスが公開されることはありません。

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)