Java | 早期リターン(ガード節)のメリットと注意点

Java Java
スポンサーリンク

早期リターンの「出口が多すぎる問題」とは?

早期リターン(ガード節)は便利ですが、「メソッドの中に出口(return)がたくさんある」と、コードの流れが分かりづらくなることがあります。これを「出口が多すぎる問題」と呼びます。


問題のイメージ

出口が多すぎる例

public String checkUser(User user) {
    if (user == null) return "ユーザーが存在しません";
    if (!user.isActive()) return "非アクティブです";
    if (user.isBanned()) return "利用禁止です";
    if (!user.hasPermission("ADMIN")) return "権限がありません";

    return "管理者ページへアクセスできます";
}
Java

👉 5つのreturnがあり、どこで処理が終わるのか追いづらい
特に長いメソッドだと「出口が散らばっている」状態になり、保守性が下がる。


⚠️ 注意点

  1. 出口が多いと可読性が落ちる
    → 「どこで終わるか」を探すのに時間がかかる。
  2. リソース管理に影響
    → ファイルやDB接続を閉じる処理が必要な場合、出口が多いと「閉じ忘れ」が起きやすい。
  3. チーム規約とのズレ
    → 一部のチームでは「出口は1つにする」ルールを採用していることもある。

改善方法

1. 結果を変数にまとめて最後に返す

public String checkUser(User user) {
    String result;

    if (user == null) {
        result = "ユーザーが存在しません";
    } else if (!user.isActive()) {
        result = "非アクティブです";
    } else if (user.isBanned()) {
        result = "利用禁止です";
    } else if (!user.hasPermission("ADMIN")) {
        result = "権限がありません";
    } else {
        result = "管理者ページへアクセスできます";
    }

    return result;
}
Java

👉 出口は1つだけ。処理の流れが追いやすい。


2. メソッドを分割する

public String checkUser(User user) {
    if (!isValid(user)) return "ユーザーが不正です";
    if (!canAccessAdmin(user)) return "権限がありません";

    return "管理者ページへアクセスできます";
}

private boolean isValid(User user) {
    return user != null && user.isActive() && !user.isBanned();
}

private boolean canAccessAdmin(User user) {
    return user.hasPermission("ADMIN");
}
Java

👉 判定を小さなメソッドに分けることで、出口が整理され、読みやすさも向上。


まとめ

  • 出口が多すぎると流れが分かりづらい
  • 改善方法:
    • 結果を変数にまとめて最後に返す
    • メソッドを分割して責務を整理する
  • 実務のコツ:
    • 短いメソッドなら早期リターンでOK
    • 長いメソッドやリソース管理が絡む場合は出口を整理する

✅ つまり「早期リターンは便利だけど、出口が散らばりすぎないように工夫する」ことが大切です。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました