アーリーリターンのメリットとして当てはまらないものは?
解説
アーリーリターンはコードの可読性を上げるためのテクニックであり、実行速度を上げるためのものではありません。関数の先頭で「条件に合わない場合」をさっさと return して追い出すことで、残りのコードを正常系だけに集中させるのが目的です。「実行速度が速くなる」は一見もっともらしいですが、アーリーリターンの有無でJavaScriptエンジンの実行速度が体感できるほど変わることはありません。速度が変わるとしたらアルゴリズムの改善やデータ構造の選択であって、returnの位置の問題ではありません。アーリーリターンで何が変わるのか典型的なのが、if-elseのネストが深くなったコードの改善です。たとえば以下のようなコードがあるとします。function canDrink(user) { if (user) { if (user.age >= 20) { if (!user.isDriving) { return true; } else { return false; } } else { return false; } } else { return false; } }ネストが3段になっていて、どの条件がどの結果に対応するか追いにくいですよね。アーリーリターンで書き直すとこうなります。function canDrink(user) { if (!user) return false; if (user.age < 20) return false; if (user.isDriving) return false; return true; }ネストがゼロになり、「ダメなケースを上から順に弾いて、最後に残ったら OK」という流れが一目でわかります。ガード節という考え方アーリーリターンで条件外を弾く部分はガード節(guard clause)と呼ばれます。「この先に進んでいい条件を満たしているか?」を関数の入口でチェックする門番のようなイメージです。ガード節を使うと、関数の本体には「すべての前提条件をクリアしたケース」だけが残るため、正常系のロジックに集中してコードを書けます。アーリーリターンを使わない方がいいケース万能ではありません。たとえば関数の最後にリソースの解放やログ出力など「必ず実行したい処理」がある場合、途中で return すると実行されなくなります。そういった場合は try-finally を使うか、あえてif-elseで書いた方が安全です。また、関数が非常に短い(2〜3行)場合は、アーリーリターンにしても可読性がほとんど変わらないので無理に使う必要はありません。「パフォーマンスが上がる」は本当にゼロなのか厳密に言えば、条件外を早く抜ける分だけ後続の処理をスキップできるので、理論上はわずかに速くなる場面もあります。しかしそれはアーリーリターン固有のメリットではなく、単に「不要な処理を実行しない」という当たり前の話です。アーリーリターンの目的として挙げるものではありません。