実務的な「早期リターン+例外処理」のコードサンプル
早期リターンは 業務ロジックの条件分岐 に、例外処理は 外部要因や予測不能な失敗 に使うのが基本です。両方を組み合わせると、コードがシンプルで安全になります。
例1:ユーザー登録処理
public void registerUser(String name, String email) {
// --- 早期リターンで入力チェック ---
if (name == null || name.isEmpty()) {
System.out.println("名前を入力してください");
return;
}
if (email == null || !email.contains("@")) {
System.out.println("メールアドレスが不正です");
return;
}
// --- 例外処理で外部要因をカバー ---
try {
Database.saveUser(name, email); // DB保存処理
System.out.println("ユーザー登録完了: " + name);
} catch (SQLException e) {
System.out.println("データベースエラー: " + e.getMessage());
}
}
Java👉 入力チェックは「想定内の異常」なので早期リターン。
👉 DBエラーは「外部要因の失敗」なので例外処理。
例2:APIリクエスト処理
public Response handleRequest(Request req) {
// --- 早期リターンでリクエスト検証 ---
if (req == null) {
return new Response(400, "リクエストが空です");
}
if (req.getUserId() == null) {
return new Response(400, "ユーザーIDが必要です");
}
// --- 例外処理で外部サービス呼び出し ---
try {
Data data = ExternalApi.fetchData(req.getUserId());
return new Response(200, "成功", data);
} catch (IOException e) {
return new Response(503, "外部サービスエラー: " + e.getMessage());
}
}
Java👉 リクエストの妥当性は早期リターンで即終了。
👉 外部APIの失敗は例外処理で安全に対応。
例3:ファイル処理
public void processFile(String path) {
// --- 早期リターンで事前チェック ---
if (path == null || path.isEmpty()) {
System.out.println("ファイルパスが指定されていません");
return;
}
File file = new File(path);
if (!file.exists()) {
System.out.println("ファイルが存在しません: " + path);
return;
}
// --- 例外処理で読み込み失敗をカバー ---
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println("ファイル読み込みエラー: " + e.getMessage());
}
}
Java👉 ファイルパスや存在チェックは早期リターン。
👉 実際の読み込みエラーは例外処理。
まとめ
- 早期リターン: 想定内の異常(入力チェック、条件不一致)を即終了してコードをシンプルに。
- 例外処理: 想定外の異常(外部サービス、ファイル、DBエラー)を安全にキャッチ。
- 組み合わせると: 「業務ロジックは早期リターン」「外部要因は例外処理」で、読みやすく堅牢なコードになる。
