return文は条件式も設定できる

条件式の結果をそのままreturnすればいいのに、余計な判定処理を挟んでいるケースをよく見かけます。

そうした方が読みやすい場合も確かにありますが、大抵の場合は可読性とパフォーマンスを低下させるだけの無駄な処理になってしまっています。

例えば、このようなコードです。

public boolean checkMinus(int value) {
    boolean retVal;
    if(value < 0) {
        retVal = true;
    } else {
        retVal = false;
    }
    return retVal;
}

 

まず、判定結果をわざわざ変数retValに詰め替えたりせず、メソッドが返すべき値が確定した時点でreturnすべきです。

public boolean checkMinus(int value) {
    if(value < 0) {
        return true;
    }
    return false;
}

ここまでは、『戻り値を返すのは一番最後?』で書いたことの繰り返しなので、詳細はそちらをお読みいただければと思います。

 

本題はここからです。

今回のような場合、そもそもif文が完全に不要です。
先に答えを書いてしまいますと、たったこれだけで同じ処理ができてしまいます。

public boolean checkMinus(int value) {
    return value < 0;
}

なぜならば、「value < 0」という条件式自体が true/false のbool値を返してくるからです。

条件式が返すbool値をそのままreturnすればいいところを、今まではそのbool値をif文で判定して、もう一回bool値を生成してreturn、という二度手間なことをやっていたわけです。

 

一旦、最初のサンプルをこのような形に書き換えてみましょう。
条件式がbool値を持っているということや、無駄な処理が含まれていたことが理解しやすいと思います。

public boolean checkMinus(int value) {
    boolean result = (value < 0);
    if(result == true) {
        return true;
    }
    return false;
}

 

今回は不等号で説明しましたが、不等号に限らず、if文で判定できる演算子を使った条件式なら全て同じことが可能です。
というより、if文で判定できる時点でその条件式は必ずbool値を返しています。

 

return文のためだけに変数の詰め替えや条件判定を行っていた方は、今までのソースを見直してみましょう。
「条件式はbool値と等価」ということを意識するだけで、return文が随分すっきりすると思います。

もちろん、条件式が複雑な場合は逆にreturn文が読みにくくなってしまうので、そこは臨機応変に使い分けてください。




コメントを残す

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