エッジケース!ES6 仕様のプロジェクトエディタとしての私の日々はエッジケースに明け暮れました。ほとんどのソフトウェアと同様に、プログラミング言語機能の設計は通常、特定のユースケースによって決まります。しかし、プログラマーは言語機能を新しい方法で使用することができ、多くの場合、それらの元のユースケースの範囲を大きく超えています。さらに、単独で使用される言語機能はありません。すべての機能は潜在的に他のすべての機能と相互作用します。これらの予期せぬ使用と機能の相互作用はエッジケースの領域です。
例えば、パラメーターのデフォルト値の初期化式に eval 関数を使用して、関数本体に宣言されている変数と同じ名前のローカル変数を作成してから、パラメーター値としてその名前を参照する矢印関数を返す関数があるとします。関数本体のコードがパラメーター値にアクセスして矢印関数を呼び出した場合はどうなりますか?どの変数がアクセスされますか?検出して報告する必要があるエラーはありますか?ES6 の設計時には、このようなエッジケースが眠れない夜を過ごしました。
優れた言語設計では、少なくともこのようなエッジケースを考慮する必要があります。複数の実装がある非常に普及した言語の仕様では、すべてのエッジケースで何が起こるのかを正確に特定する必要があります。そうしないと、言語の実装が異なるとエッジケースの処理が異なり、プログラムがどこでも同じように動作しなくなります。
本当に ES6 を理解したいのであれば、珍しい状況やエッジケースに対処する場合でも、各機能がどのように機能するかを理解する必要があります。Axel Rauschmayer の Exploring ES6 を他の書籍と区別するのは、ECMAScript の内部の仕組みを本当に気にしていることです。おそらく既に理解している一般的なユースケースを説明するだけではなく、意味論を深く掘り下げ、必要に応じてエッジケースで直面します。機能がそのように機能する理由と、実際的なコードでどのように使用されるかを説明しています。この本の内容を理解すれば、ES6 のエキスパートになれます。
アレン・ウィルフス・ブロック
ECMAScript 2015 (ES6) 仕様エディター