第3章 JavaScriptの本質
目次
書籍を購入
(広告です。ブロックしないでください。)

第3章 JavaScriptの本質

JavaScriptの本質は、次のように要約できます。

動的である
多くのことが変更可能です。たとえば、オブジェクトが作成された後でも、オブジェクトのプロパティ(フィールド)を自由に追加および削除できます。また、オブジェクトファクトリー(例:クラス)を最初に作成しなくても、直接オブジェクトを作成できます。
動的に型付けされる
変数とオブジェクトのプロパティは常に任意の型の値を保持できます。
関数型であり、オブジェクト指向である
JavaScriptは、2つのプログラミングパラダイムをサポートしています。関数型プログラミング(ファーストクラス関数、クロージャ、bind()を介した部分適用、配列用の組み込みのmap()reduce()など)とオブジェクト指向プログラミング(可変状態、オブジェクト、継承など)です。
エラーを黙殺する
JavaScriptには、ECMAScript 3まで例外処理がありませんでした。そのため、言語がしばしばエラーを黙殺し、引数とオペランドの値を自動的に変換するのです。当初は例外をスローできなかったのです。
ソースコードとしてデプロイされる
JavaScriptは、常にソースコードとしてデプロイされ、JavaScriptエンジンによってコンパイルされます。ソースコードには、柔軟な配信形式であることと、エンジン間の違いを抽象化するという利点があります。ファイルサイズを小さく保つために、2つの手法が使用されています。圧縮(主にgzip)とminify(変数の名前変更、コメントの削除などによってソースコードを小さくすること。詳細は第32章を参照)。
Webプラットフォームの一部である
JavaScriptは、Webプラットフォーム(HTML5 API、DOMなど)の不可欠な部分であるため、WebプラットフォームなしでもJavaScriptを使用できることを忘れがちです。ただし、Node.jsなどの非ブラウザ環境でJavaScriptが使用されるほど、そのことがより明白になります。

エレガントな部分

しかし、JavaScriptには多くのエレガントな部分もあります。Brendan Eichのお気に入りは次のとおりです。[3]

  • ファーストクラス関数
  • クロージャ
  • プロトタイプ
  • オブジェクトリテラル
  • 配列リテラル

最後の2つの項目、オブジェクトリテラルと配列リテラルを使用すると、オブジェクトから開始し、後で抽象化(コンストラクタ、JavaScriptのクラスのアナロジーなど)を導入できます。また、JSON(第22章を参照)を有効にすることもできます。

エレガントな部分は、癖を回避するのに役立つことに注意してください。たとえば、ブロック スコープ、モジュール、継承 API を言語内で実装できます。

影響

JavaScriptは、いくつかのプログラミング言語の影響を受けました(図3-1に示すとおり)。

  • Javaは、JavaScriptの構文のモデルです。また、値のプリミティブとオブジェクトへの分割、およびDateコンストラクター(java.util.Dateの移植)にもつながりました。
  • AWKは、JavaScriptの関数に影響を与えました。実際、キーワードfunctionはAWKに由来します。
  • Schemeは、JavaScriptがファーストクラス関数(値のように扱われ、関数の引数として渡すことができる)とクロージャ(第16章を参照)を持つ理由です。
  • Selfは、JavaScriptの異質なオブジェクト指向スタイルを担っています。オブジェクト間のプロトタイプ継承をサポートします。
  • PerlとPythonは、文字列、配列、正規表現のJavaScriptの処理に影響を与えました。
  • 実際の言語を超えて、HyperTalkはJavaScriptがWebブラウザーに統合された方法に影響を与えました。HTMLタグにonclickなどのイベント処理属性を持たせることにつながりました。


[3] Brendan Eich, “A Brief History of JavaScript,” July 21, 2010, http://bit.ly/1lKkI0M.

次へ:4. JavaScriptの誕生