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


前回: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 メソッド、変数、定数の命名とメソッド抽出

「もっと楽しく、もっと素晴らしく」をモットーに自分も使う人も毎日楽しくなるアプリを制作している、システムエンジニアなのによくしゃべる人。

医療システムや販売管理などのWindowsアプリ、中古車売買などのWebアプリ、クラウドを使ったシステム構築など、業務システムのシステムエンジニアとして15年以上の経験を積んで独立。

現在は、朝日新聞で紹介されたTwitterアプリ「Tweecha」、公式Twitterアプリを便利にしたような「Txiicha」、簡単にパーセント計算ができる「電卓っちゃ」、脳トレゲームなどを制作。

趣味はギター・ベース・ドラム・ピアノ等の楽器演奏、映画・アニメ・ドラマ鑑賞とゲーム。時間を作ってDTMにもチャレンジしたい。

毎日を楽しくするアプリを一緒に作りたい人を募集中。興味が有る方は @iam_o_sin までご連絡下さい。

取材依頼やシステム構築、アプリ制作の依頼や相談は「お問い合わせ」からご連絡下さい。

0

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

2 thoughts on “sinProject流システム開発のススメ #004 早めのreturn