JavaScriptの言語的な特徴について
JavaScriptは次のような特徴をもつ言語です。
- high-level ハイレベル
- prototype-based プロトタイプベース
- object-oriented オブジェクト指向
- multi-paradigm マルチパラダイム
- interpreted or JUST-IN-TIME compiled
- dynamic 動的
- garbage-collected ガベージコレクション
- first-class functions 関数を第一級オブジェクトとして扱うことのできる
- single-threaded シングルスレッド
- a non-blocking ノンブロッキング
- event loop concurrency model イベントループ同時実行モデル
目次から読む
high-level ハイレベル
メモリやCPUなども動くためにはプログラミング言語が必要です。 メモリやCPUなどのプログラミングは低級言語(Low-level programming language)という言語で動いています。 そしてJavaScriptは高級言語(High-level programming language)です。 低級言語と高級言語の違いは、ざっくりいうと、低級言語は数字の羅列などのコンピュータが理解できる言語に近いです。 高級言語は人間が理解しやすい英語などの自然言語が使えたりする言語です。garbage-collected ガベージコレクション
高級言語であるJavaScriptはオブジェクトや文字列が使用されなくなると、自動的に開放してくれます。これをgarbage-collected(ガベージコレクション)といいます。 低級言語は明示してメモリーを開放しないといけませんが、高級言語はこちらがコードを書いて明示せずともお掃除してくれます。 メモリー管理をする必要がないという意味ではないので注意しましょう。interpreted or JUST-IN-TIME compiled
機械語は2進数なので、0か1かです。 JavaScriptのような高級言語は人が理解できる自然言語に近いかたちなので、機械語に翻訳する必要があります。 開発しているときにまとめて翻訳するものを「コンパイラ」(compiler:翻訳者)といいます。 そして、実行時に逐次変換しながら並行して実行するものを「インタプリタ」(interpreter:通訳者)といいます。 この翻訳作業は、JavaScriptエンジン内で行われます。multi-paradigm マルチパラダイム
JavaScriptはマルチパラダイム(multi-paradigm)言語です。 多くの言語が手続き型プログラミングのみであるのに対し、 JavaScriptは 手続き型プログラミング(Procedural programming)(命令型) オブジェクト指向プログラミング(OOP, Object-oriented programming)(命令型) 関数型プログラミング(Functional programming)(宣言型) と複数のパラダイムを利用できます。 パラダイムはコーディングのスタイルや技術に直結するものなので、マルチで選択肢があるということで自由度が高いといえます。imperative(命令型)かdeclarative(宣言型)
プログラミング言語にはimperative(命令型)かdeclarative(宣言型)かという2つのカテゴリーがあります。 オブジェクト指向プログラミング(OOP)、手続き型プログラミング、および並列処理は、命令型プログラミングパラダイムです。 関数型プログラミング、論理プログラミング、およびデータベース処理は、宣言型プログラミングパラダイムです。prototype-based プロトタイプベース
object-oriented オブジェクト指向 数字や文字列などのプロミティブ以外のものはすべてオブジェクトとなります。 たとえば配列はオブジェクトです。[]で囲うことで使えるようになりますが、その理由は配列の設計図(テンプレート、blueprint)のようなものがあるからです。それをプロトタイプといい、そのプロトタイプを継承しているから配列を作ることができます。 このプロトタイプはすべてのArrayのメソッドを保持しています。Array.prototype.pushやArray.prototype.indexOfなどがあります。 配列がこのプロトタイプ(設計図)からできあがり、Arrayのメソッドを継承しているから、配列を配列として使うことができます。first-class functions
JavaScriptは関数を第一級オブジェクトとして扱うことのできます。このことをJavaScriptは第一級関数 (First-class functions) を持つと表現されます。 これの意味するところは、シンプルにいうと、関数を変数として扱えるということです。 関数を変数みたいに他の関数に渡したり関数からリターンしたりできるということです。 たとえばopenModalという関数があったとします。JavaScriptならaddEventlistener('click’, openModal)という変数の形で使用することができます。 これができるととっても便利です。dynamic 動的
JacaScriptは動的型付き言語(dynamically typed language)です。- 変数宣言時に型の宣言をしない
- 暗黙的な型変換がある
- 変数宣言時に型の宣言をする
- 暗黙的な型変換がない
