初心者がよくつまずくのが「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を活用
条件が「状態の種類」による分岐なら、switchやenumを使う方がスッキリ。
switch (status) {
case ACTIVE:
System.out.println("利用可能");
break;
case INACTIVE:
System.out.println("停止中");
break;
case BANNED:
System.out.println("利用禁止");
break;
}
Java👉 ネストせずに「状態ごとの処理」を整理できる。
まとめ
- 早期リターン → ネストを浅くする最強のテクニック
- 複合条件 → シンプルな判定ならまとめて書く
- メソッド化 → 複雑な条件は意味のある名前で切り出す
- switch/enum → 状態ごとの分岐は構造化して整理
✅ ネストが深くなると「バグの温床」になりやすいので、「読みやすさ優先」でリファクタリングするのが実務では重要です。
