【Q&A】メタ言語はJavaScriptの弱点を克服している

こんにちは、@codeship_techです。

本日の質問がこちら。

メタ言語って何ですか?

ということで、TypescriptやSassなどメタ言語についての質問ですね。

それではこちらの質問に答えていきます。

メタ言語とは「言語を作る」言語です。
JavaScriptにおけるTypeScriptやCSSにおけるSassのことですね。

メタとは

プログラミング言語は、システム開発を目的として記述されますね。
例えばJavaScriptを記述することでWebアプリケーションを作ることができますし、CSSでWebページの装飾を行えます。

さて、ここでの「メタ」とは「何かを作るための同質の何か」を指します。
メタ言語とは「在る言語を作るために記述する別の言語」のことを指します。

従って「JavaScript言語を作るための言語」がJavaScriptのメタ言語(TypeScript)として存在し、「CSS言語を作るための言語」が、CSSのメタ言語(Sass)として在るわけです。

論法に従うと「メタ言語を記述することでプログラミング言語が記述でき、それによりWeb開発ができる」と言った感じです。
ちなみに見方を変えれば、HTMLも「Webページで見られる平文を作成するためのメタ言語」と解釈できます。

メタ言語を用いるメリット

JavaScriptやCSSは、ご存知Webシステム開発で大変広く用いられている言語ですが、その特性上、システム開発に支障をきたす弱点を指摘されることがあります。

メタ言語は、それら弱点をうまく克服できるとされています。
ここではJavaScriptの弱点を取り上げましょう。

JavaScriptの弱点:動的型付け

JavaScriptは「動的型付け言語」です。
これがしばしば大規模開発を行う際の弱点として指摘されます。

型とは変数の値の種類のことです。
文字列や数値、booleanなどのことです。
動的型付けとは、プログラムを書く段階では変数に入る型を厳密に指定しない形式です。

型を指定しないので、小さいプログラムであれば簡単に記述できるところがJavaScriptの良いところですが、大きなプログラムになってくると、実行しないと意図した通りに挙動するかどうかがわかりません

実行のたびにバグを起こす可能性を大きく孕んでいる状態では安心して開発を進めることが困難です。

TypeScript:静的型付けなJavaScriptのメタ言語

TypeScriptはマイクロソフトにより開発された、JavaScriptを「静的型付け」として記述するためのメタ言語です。

TypeScriptを導入することで、関数で指定した変数の型とは違う、不正な型の変数が代入されたときにそれを検知しエラーを発生させることができます

すなわち、大規模開発でも挙動が予測しやすくなり比較的安心して開発を行うことができるようになります。

以下はTypeScriptの例です。
文字列型だけを関数の引数として定義し、他の型の引数で呼び出しを行うとエラーを発生させるようにできます。

TypeScriptの例

function hello(person: string){
console.log("Hello, "+person);
}const p = 100;hello(p);//エラーになります

引数 person: string に注目しましょう。
これにより引数 personstring 型以外の代入を許されません。

上記の例では引数に数値を代入しようとしていますが、そもそも実行ができません。

メタ言語TypeScriptはこのように変数の型に制約を設けられる点が、JavaScriptの弱点を克服していると言えます。

本日は、メタ言語とは何かについて解説しました。