11章メタプログラミングを学ぶ
「meta-」は「高次-」や「超-」を意味する接頭辞で「『語幹』を対象とした『語幹』」という意味の単語を作ります。たとえば「メタフィクション」は「フィクションについてのフィクション」という意味で、登場人物による小説自身への言及や小説を批評する小説を指し、「メタアナリシス」は「解析(アナリシス)結果の解析(アナリシス)」という意味で、複数の研究結果をまとめて統計的に解析することやその結果を指します。
プログラミングにもメタプログラミングと呼ばれるテクニックがあります。プログラミングは言い換えると「コードを記述すること」です。つまりメタプログラミングは「コードを記述するコードを記述する」と言い換えられます。コードを記述するコードというと、たとえばオブジェクトのtoJSON()
メソッドを使用してJSONを生成するようなコードもそこに含まれるように思うかもしれませんが、一般にそのような単純なコードジェネレータはメタプログラミングには含まれません。メタプログラミングは通常「自分自身のコードを対象としたプログラミング」を意味します。
一般にいわゆるスクリプト言語はメタプログラミングが得意だとされています。スクリプト言語はほとんどがインタプリタ型でソースコードを逐次的に解釈しながら実行するため、実行前にソースコード全体を一括で変換しておく必要のあるコンパイラ型の言語と比べて、実行時の割り込みや変換の自由度が高い傾向があります。
インタプリタ型言語とコンパイラ型言語
プログラムは文字列としてのソースコードを、コンピュータ内部で利用できる形式に変換したあとで実行されます。この変換と実行をどのようなステージに分けて実行するかによって、プログラミング言語は
Get ハンズオンJavaScript now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.