そのelse文、本当に必要?

else if文やelse文は、不要なものが大半を占めています。

例えばこちらのソースは一見シンプルで綺麗に見えますが、実際に読んでみると、どういうときにメイン処理が実行されるのかが意外と分かりにくいです。

if (errorFlag) {
    System.out.println("エラーです");
} else if (value == null) {
    System.out.println("値が設定されていません");
} else if (!value.equals("first") && !value.equals("second")) {
    System.out.println("値が不正です");
} else {
    (メイン処理)
}

 

else if や else を多用すると、出てきた条件を全部覚えながら読む必要があるため、どうしても可読性が落ちてしまいます。

私が出会ってきたelse if や else の内、8割は無くせるものでした。
ifだけ、つまり「もし○○だったら△△する」だけで組まれるロジックが理想です。

もちろん「無くせる = 無くした方がいい」とは限りませんが、少なくとも、無駄な記述が氾濫してるのは事実だと思います。

 

else if や elseを無くすとこうなります。

if (errorFlag) {
    System.out.println("エラーです");
    return;
}
if (value == null) {
    System.out.println("値が設定されていません");
    return;
}
if (!value.equals("first") && !value.equals("second")) {
    System.out.println("値が不正です");
    return;
}
(メイン処理)

 

行数が増えて一見悪化したように見えますが、メイン処理が長い場合だと、間違いなくこちらの方が読みやすいです。

今回の場合、さらにもう一工夫できます。
valueのチェックをする処理を別メソッドに切り分けてみます。

if (errorFlag) {
    System.out.println("エラーです");
    return;
}
if (!checkValue(value)) {
    return;
}
(メイン処理)

~~~~~~~~~~~~~~~~

private boolean checkValue(String value) {
    if (value == null) {
        System.out.println("値が設定されていません");
        return false;
    }
    if (!value.equals("first") && !value.equals("second")) {
        System.out.println("値が不正です");
        return false;
    }
    return true;
}

 

「もし○○だったら△△する」だけをひたすら組み合わせた感じです。
日本語でも、「そうじゃなくて●●だったら▲▲する」とか「それ以外」とかはできるだけ無い方が分かりやすいと思います。

ただし、単純な二択の場合はif ~ else ~ の方が読みやすいので、そこは臨機応変に選んでいただければと思います。




コメントを残す

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