「条件分岐は if と else をセットで書く」と最初に覚えた人は多いと思います。ただ実務のコードを見ていると、else が無い方が読みやすくなる場面が少なくないと感じています。今回は、if のネスト(入れ子)が深くなって読みにくい、という状態を「早期 return」という書き方でほどく話です。

ネストが深くなるコードの例

会員種別によって料金区分を返す関数を、if/else のセットで素直に書くとこうなります。

function priceType(user) {
  if (user) {
    if (user.isMember) {
      if (user.age >= 60) {
        return "senior";
      } else {
        return "member";
      }
    } else {
      return "guest";
    }
  } else {
    return "none";
  }
}

動きますし、間違ってもいません。ただ、"guest""none" がどの条件で返るのかを知るには、閉じ括弧を数えながら上に戻って読む必要があります。条件が1つ増えるたびに、この「上に戻る距離」が伸びていきます。

早期 return で書き直す

「当てはまらないものから先に返して抜ける」と、同じ関数がこうなります。

function priceType(user) {
  if (!user) return "none";
  if (!user.isMember) return "guest";
  if (user.age >= 60) return "senior";
  return "member";
}

上から順に読むだけで、「user が無ければ none」「会員でなければ guest」「60歳以上なら senior」「それ以外は member」と、条件と結果が1行ずつ対応しています。else は1つも出てきませんが、返す値は元のコードと完全に同じです(4パターンすべて手元で突き合わせて確認しました)。

このように、関数の先頭で「この条件なら、もうここで終わり」と返してしまう書き方を早期 return と呼びます。このうち、先頭で例外的な入力(user が無い、会員でない)を弾いている部分は特にガード節と呼ばれます。

なぜ読みやすくなるのか

ポイントは「else の中身を読むときに、if の条件を裏返して覚えておかなくていい」ことです。行数が減ること自体が目的ではありません。

if/else の形だと、else ブロックを読むときに「さっきの条件が偽だった場合だな」と頭の中で条件を反転させて保持する必要があります。ネストが深いと、この「反転して保持」が何段も積み重なります。早期 return では、当てはまるケースはその場で return して消えていくので、下の行を読む時点では「上の条件はすべて当てはまらなかった」という状態が自動的に確定しています。覚えておくものが減る分、読むのが楽になります。

else を書いた方がいい場面

「ほとんどの場合」と書いたのは、例外もあるからです。

  • 2つの分岐が対等で、どちらも同じくらいの重さの処理をするとき(例: 表示モードが「一覧」か「詳細」かで、それぞれ別の画面を組み立てる)。この場合は if/else で「どちらか一方」であることを明示した方が意図が伝わります
  • if/else の後ろに、両方に共通する処理が続くとき。早期 return で抜けてしまうと、その後続処理まで飛ばしてしまいます。たとえば「会員なら割引を適用し、非会員ならそのまま。どちらの場合も最後にログを残す」という処理では、途中で return するとログが残らなくなるので、ここは else を書くか、条件を反転して if 1本にまとめるのが素直です

つまり「片方は例外的で、さっさと片付けたい」ときは早期 return、「両方とも本流」「後ろに共通処理がある」ときは if/else、という使い分けです。

なお、ループの中では return すると関数ごと抜けてしまうので、「その要素だけ飛ばして次へ進みたい」ときは continue で同じ発想が使えます。

まとめ

  • if のネストが深くなったら、「当てはまらないものから先に return して抜ける」形に書き直せないか考えてみる
  • 早期 return は else の条件を頭の中で反転して保持する負担を減らす
  • 2つの分岐が対等なとき、後ろに共通処理が続くときは if/else の方が意図が伝わるので、全部を早期 return にする必要はない

AIにコードを書いてもらった時にも、この観点はそのまま使えます。ネストが3段以上になっていたら「早期 return で書き直せますか」と聞いてみてください。私が試した範囲では、素直に書き直してくれます。


面談なしで、今日から始められます

この講座は 未経験から Next.js + Supabase + Claude Code で Webアプリを公開するまで を全24セッションで体系化した教材付きプランです。無料相談を挟まず、申し込んだその日から教材で学習を始められます。AIが学習パートナーになって何度でも質問でき、つまずいた所だけチャットで直接サポートします。

  • 今日から始める(教材完全版+月5,500円・チャット質問し放題・いつでも解約OK)→ https://menta.work/plan/20251?ref=menta-knowledge
  • いきなりは不安な方へ:無料の教材体験版もあります(最初の数セッション分)→ プラン詳細をご覧ください