基本的かつ有用なコーディング手法の一つ、早期リターンについて紹介します。特にif-elseを多用した複雑なネストを作ってしまいがちな初中級プログラマの方は一読ください。
早期リターンとは何か
早期リターン(early return)とは、関数内で特定の条件に合致しない場合にすぐにreturnで関数実行を終了するコーディング手法です。こうすることでif文のネスト(入れ子)を減らし、コードの流れをシンプルに保つことができます。早期リターンは「ガード節(ガード句)」とも呼ばれ、異常系の処理を冒頭で片付けてしまい、本来実現したい処理(正常系)を後半に残す書き方のことです。
例えば、関数の冒頭で入力チェックを行い、条件に合わない場合は即座にリターンしてしまいます。これによって不要な処理の実行を避け、コードの読みやすさと保守性を高める効果があります。
コード例:早期リターンの適用前と適用後
まずは、早期リターンを使わずにネストが深くなっているコード例を考えます。例えば、注文処理を行う関数processOrderを次のように実装したとします。
(改善前)早期リターンを使わないコード例:
let status = "注文処理が完了しました";
if (validateOrder(order)) {
if (processPayment(order)) {
shipOrder(order);
} else {
status = "エラー: 支払いに失敗しました";
}
} else {
status = "エラー: 注文内容が不正です";
}
return status;
}
上記のコードでは、ifとelseが入れ子になっており、処理の流れを追うのにネストを深く辿る必要があります。条件が増えるごとにネストが増加し、コード全体の見通しが悪くなります。
次に、この関数を早期リターンを用いて書き直してみます。
(改善後)早期リターンを使ったコード例:
if (!validateOrder(order)) {
return "エラー: 注文内容が不正です";
}
if (!processPayment(order)) {
return "エラー: 支払いに失敗しました";
}
// ここまでで異常系は全て関数を抜ける
shipOrder(order);
return "注文処理が完了しました";
}
こちらのコードでは、各条件で問題があれば即座に関数から抜けるため、ネストが発生していません。コードを上から下へ直線的に読み下せるので、処理の流れが把握しやすくなっています。
例えば新たに「在庫不足」のチェックなど条件を追加したい場合も、if文を一つ追加するだけで済み、既存コードを大きく書き換える必要がありません。
このように早期リターンにより各条件処理が明確に分離されるため、後から新しい条件を追加してもコードが複雑になりにくいというメリットがあります。
ガード節を活用することで「前提条件のチェック部分」と「メインの処理部分」が分離され、処理の流れが段階的に追えるため、可読性も向上するケースが多いです。
一応returnが複数箇所になり関数の出口が分かりづらくなるというデメリットもあるため、その点は利用の際に気をつけてください。
有用なコーディング手法ですので、常に選択肢に入れ、見通しのよくなる場面では積極的に利用しましょう。
参考
- Dustin Boswell, Trevor Foucher 著・角 征典 訳『リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック』(O'Reilly Japan, 2012)
- ISSOHテックブログ「early returnとは何か:その定義と基本的な考え方」(2025年6月16日閲覧)
- Zenn メディアエンジン株式会社 「早期リターンを書こう」(2025年6月16日閲覧)