Masakazu Yoshida

JavaScriptは静的スコープのLisp-1である

2016-01-28 17:00

JavaScriptは、静的スコープのLisp-1である。

これが、私のプログラミング言語としてのJavaScriptの理解です。

最初に、プログラムの抽象化について。

JavaScriptには オブジェクト指向プログラミングのしくみが付いてきますが、 私は基本的に使いません。 JavaScriptプログラミングでは、 抽象化のために 静的スコープにもとづく関数クロージャを多用します。 Lispと同様、関数は first-class object ですので、 関数を値として変数に格納(束縛)したり、 引数として別の関数に渡したり、 その場で新しい関数をつくったりできるのです。

次に、動的型付け言語であることについて。

JavaScriptのプログラムが 動的に型付けされることには欠点ももちろんあります。 しかし、ブラウザ上ではJavaScript以外の選択枝がない以上、 動的型付け言語であることを上手に生かした設計をし、 簡潔で理解しやすいコードを書くべきと考えます。 そのためにはLispプログラミングの知見が生かせます。

最後に、いわゆるLispのマクロについて。

Lispと異なり、JavaScriptにはS式ベースのマクロに相当するものがありません。 言語デザインの根本的な違いなのでしかたがありません。 残念ですが、メタプログラミングが必要な場合は、 すなおに、JavaScriptプログラムを生成する外部ツールを書いて 対処します。

(たまにはgeekyな独白もいいでしょう。)