「早期リターンを使わない場合」と「使った場合」の比較
早期リターン(ガード節)は、コードの読みやすさを大きく改善するテクニックです。ここでは同じ処理を「使わない場合」と「使った場合」で比較してみましょう。
早期リターンを使わない場合(ネストが深い)
public void processUser(User user) {
if (user != null) {
if (user.isActive()) {
if (user.hasPermission("ADMIN")) {
System.out.println("管理者ページへアクセスできます");
} else {
System.out.println("権限がありません");
}
} else {
System.out.println("ユーザーは非アクティブです");
}
} else {
System.out.println("ユーザーが存在しません");
}
}
Java👉 ネストが3段階になり、「どこで何を判定しているか」を追うのが大変。
条件が増えるほどインデントが深くなり、可読性が落ちる。
早期リターンを使った場合(ガード節)
public void processUser(User user) {
if (user == null) {
System.out.println("ユーザーが存在しません");
return;
}
if (!user.isActive()) {
System.out.println("ユーザーは非アクティブです");
return;
}
if (!user.hasPermission("ADMIN")) {
System.out.println("権限がありません");
return;
}
System.out.println("管理者ページへアクセスできます");
}
Java👉 異常系を先に処理して即終了するので、残りは「正常系」だけがスッキリ残る。
読み手は「このメソッドは何をしたいのか」を一目で理解できる。
読みやすさの違い
| 項目 | 早期リターンなし | 早期リターンあり |
|---|---|---|
| インデント | 深くなりがち | 常に浅い |
| 正常系の見やすさ | ネストの奥に隠れる | 最後にまとまって見える |
| 異常系の扱い | elseの中に埋もれる | 上から順に「ガード」として並ぶ |
| バグのリスク | elseの抜け漏れが起きやすい | 条件ごとに即終了なので明確 |
まとめ
- 早期リターンなし: ネストが深くなり、正常系が見えにくい。
- 早期リターンあり: 異常系を先に処理して、正常系が最後にまとまるので読みやすい。
- 実務では「入力チェック」「認証処理」「APIレスポンス」などで早期リターンを使うと、コードの意図が明確になり保守性が上がる。
