本書について知っておくべきこと
目次
本書をサポートしてください:購入 (PDF, EPUB, MOBI) または 寄付
(広告、ブロックしないでください。)

本書について知っておくべきこと

本書はECMAScript 6(正式名称はECMAScript 2015)について解説したものです。これはJavaScriptの新しいバージョンです。

対象読者:JavaScriptプログラマー

本書を理解するには、JavaScriptの知識が必要です。JavaScriptをまだ知らない場合は、私の別の著書「Speaking JavaScript」をご利用ください。これはオンラインで無料で入手でき、ECMAScript 5までを含むJavaScriptのすべてをプログラマーに教えます。

なぜ本書を読むべきか

本書の読み方

本書はES6を3つの詳細レベルで解説しています。

その他知っておくべきこと

本書のソース

ES6機能の実装が存在するずっと前から本書の執筆を開始したため、かなりの量の調査が必要でした。重要な情報源は以下の通りです。

用語集

厳格モードと非厳格モード

ECMAScript 5では言語モードが導入されました。厳格モードは、セマンティクスを変更し、より多くのチェックを実行し、より多くの例外をスローすることで、JavaScriptをよりクリーンな言語にします。「Speaking JavaScript」の「厳格モード」セクションで詳細を確認してください。レガシー/デフォルトモードは非厳格モードまたは非厳格モードと呼ばれます。

厳格モードは、次の行(ECMAScript 5以前のバージョンでは何も行いません)を使用して有効にします。

'use strict';

この行をファイルの先頭に配置すると、そのファイル内のすべてのコードが厳格モードになります。この行を関数の最初の行にすると、その関数だけが厳格モードになります。

ディレクティブを使用して厳格モードを有効にすることは、あまりユーザーフレンドリーではなく、ES5での厳格モードの普及率が低い理由の1つでした。しかし、ES6モジュールとクラスは暗黙的に厳格モードになっています。ほとんどのES6コードはモジュールに存在するため、厳格モードはES6の事実上のデフォルトになります。

プロトコル

「プロトコル」という用語は、コンピューティングにおいてさまざまな意味を持ちます。プログラミング言語とAPI設計のコンテキストでは、次のように使用しています。

プロトコルは、インターフェース(メソッドや関数のシグネチャ)とそれらを使用するためのルールを定義します。

サービスを実行する方法を指定することが目的です。そうすれば、誰でもサービスを実行でき、誰でも要求でき、確実に連携して動作することが保証されます。

ここで示した定義は、プロトコルをインターフェースと見なすもの(たとえば、Objective Cのように)とは異なります。これは、この定義にはルールが含まれているためです。

レシーバー(メソッド呼び出しの)

メソッド呼び出しobj.m(···)の場合、objはメソッド呼び出しのレシーバーであり、メソッド内ではthisを介してアクセスできます。

関数(またはメソッド)のシグネチャ

関数の(型)シグネチャは、関数の呼び出し方法、入力と出力の内容を記述します。本書では、Microsoft TypeScriptとFacebook Flowによって確立された構文を使用しています。シグネチャの例:

parseInt(string : string, radix? : number) : number

parseInt()は文字列と数値を期待し、数値を返すことがわかります。パラメーターの型が明確な場合は、型注釈を省略することがよくあります。

内部スロット

ES6言語仕様では、内部スロットを使用して内部データを格納します。仕様では、内部スロットは、名前が角かっこで囲まれたプロパティであるかのようにアクセスされます。

O.[[GetPrototypeOf]]()

プロパティと異なる点が2つあります。

内部スロットがどのように格納されるかは、未定義のままです。実際には、一部のJavaScript実装には存在しない場合もあります。

バインディングと環境

ECMAScript仕様では、環境と呼ばれるデータ構造を使用して、スコープの変数を格納します。環境は基本的に、変数名と値をマッピングする辞書です。バインディングは環境のエントリであり、変数の記憶領域です。

破壊的演算

破壊的演算(メソッド、関数)は、そのパラメーターまたはレシーバーを変更します。たとえば、push()はそのレシーバーarrを変更します。

> const arr = ['a', 'b'];
> arr.push('c')
3
> arr
[ 'a', 'b', 'c' ]

対照的に、concat()は新しいArrayを作成し、そのレシーバーarrは変更しません。

> const arr = ['a', 'b'];
> arr.concat(['c'])
[ 'a', 'b', 'c' ]
> arr
[ 'a', 'b' ]

規約

クラスの文書化

クラスCのAPIは通常、次のように文書化されます。

大文字と小文字

英語では、JavaScriptの用語を次のように大文字で表記します。

GitHub上のデモコード

GitHubのいくつかのリポジトリには、本書で示されているコードが含まれています。

サイドバー

サイドバーは、アイコンでマークされたテキストボックスです。通常のコンテンツを補完します。

脚注

時々、脚注を介して(公開されている)外部資料を参照します。2つのソースは、角かっこで接頭辞を付けてマークされています。

次へ:まえがき