Java | ネストが深くなりすぎたときのリファクタリング(改善方法)

Java Java
スポンサーリンク

初心者がよくつまずくのが「if の入れ子がどんどん深くなって、コードが読みにくくなる」問題です。
これを防ぐために、リファクタリング(書き直しの工夫)を覚えておくと、コードがぐっと読みやすくなります。


ネストが深くなる例

if (user != null) {
    if (user.isActive()) {
        if (user.hasPermission("ADMIN")) {
            System.out.println("管理者ページへアクセスできます");
        }
    }
}
Java

👉 ネストが3段階になっていて、読むのが大変。


改善方法

1. 早期リターン(ガード節)を使う

条件を満たさない場合はすぐに処理を終了して、残りをシンプルにする。

if (user == null) return;
if (!user.isActive()) return;
if (!user.hasPermission("ADMIN")) return;

System.out.println("管理者ページへアクセスできます");
Java

👉 ネストがなくなり、条件が「ガード」として上から順に並ぶので読みやすい。


2. 複合条件にまとめる

複数の条件を一度に判定できるなら、&& を使ってまとめる。

if (user != null && user.isActive() && user.hasPermission("ADMIN")) {
    System.out.println("管理者ページへアクセスできます");
}
Java

👉 1行で「全部満たすなら」と表現できる。処理が短いときに有効。


3. メソッドに切り出す

条件が複雑なら、判定を別メソッドにまとめる。

if (canAccessAdminPage(user)) {
    System.out.println("管理者ページへアクセスできます");
}

private boolean canAccessAdminPage(User user) {
    return user != null && user.isActive() && user.hasPermission("ADMIN");
}
Java

👉 「管理者ページにアクセスできるか?」という意味がコードから直接伝わる。
読みやすさ・再利用性もアップ。


4. switch文やenumを活用

条件が「状態の種類」による分岐なら、switchenumを使う方がスッキリ。

switch (status) {
    case ACTIVE:
        System.out.println("利用可能");
        break;
    case INACTIVE:
        System.out.println("停止中");
        break;
    case BANNED:
        System.out.println("利用禁止");
        break;
}
Java

👉 ネストせずに「状態ごとの処理」を整理できる。


まとめ

  • 早期リターン → ネストを浅くする最強のテクニック
  • 複合条件 → シンプルな判定ならまとめて書く
  • メソッド化 → 複雑な条件は意味のある名前で切り出す
  • switch/enum → 状態ごとの分岐は構造化して整理

✅ ネストが深くなると「バグの温床」になりやすいので、「読みやすさ優先」でリファクタリングするのが実務では重要です。

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