戻り値を返すのは一番最後?

「メソッドのreturn文は一番最後に一個だけ」としなければいけない理由はありません。
戻り値はもっと柔軟に、必要に応じて必要な箇所でその都度返すべきです。

例えばこういう書き方をよく見かけますが、一工夫するだけでかなりシンプルになります。

public String hoge(int value) {
    String retVal = "";
    if(value < 0) {
        retVal = "マイナスです";
    } else {
        retVal = "マイナスではありません";
    }
    return retVal;
}

 

戻り値をわざわざ変数retValに保持せず、メソッドが返すべき値が確定した時点で返してしまうべきです。

public String hogehoge(int value) {
    if(value < 0) {
        return "マイナスです";
    }
    return "マイナスではありません";
}

 

単に行数が減っただけでなく、デバッグするときの読みやすさが全然違います。
途中でreturnしていると、「このメソッドの処理はここで終わり」ということが一発で分かるので、そこから下を読まずにすみます。

また、微々たる違いとはいえ、変数が一個減るのでメモリの消費量も少し減ります。

 

この話は戻り値がある場合に限った話ではありません。
例えば下の2つのソースは、どちらが読みやすいでしょうか?

public void hogehoge(String value) {
    if(value != null) {
        ~~~~~
        (略)
        ~~~~~
    }
}
public void hogehoge(String value) {
    if(value == null) {
        return;
    }
    ~~~~~
    (略)
    ~~~~~
}

 

私が読んできたプログラムの中では圧倒的に前者の方が多いです。
確かに書きやすさでは前者の方が上かもしれませんが、読みやすさでは間違いなく後者の方が上です。

なぜならば後者だとデバッグの際に、「引数がnullだったらこのメソッドは何もしない」ということが一発で分かるからです。

それに対して前者は、
・引数がnullだったときに他に処理が無いのか、一番下まで見ないといけない
・if文でネストが一段下がったままになる
など、読み手にとってあまり親切とは言えません。

 

「メソッドは、戻り値が確定したらすぐreturnする」ということを意識すると、可読性の高いプログラムが書けるようになると思います。




コメントを残す

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