2010-02-23

Javascriptに強い静的型付けが欲しい

前回、私は底抜けにマヌケなミスを犯してしまった。あるNodeのオブジェクトが、ELEMENT_NODEであるかどうかを比較するのに、

function Foo(node)
{
// 間違い。
    if ( node == node.ELEMENT_NODE ) ;
// 正しくは、
    if ( node.nodeType == node.ELEMENT_NODE ) ;
}

などというコードを書いてしまった。

Javascriptには、緩い暗黙の型変換をせずに、同じかどうかを比較する演算子、===が存在する。しかし、この場合、役には立たない。なぜなら、型が違う場合、単にfalseを返すに過ぎないのだ。実行時エラーにすらならない。

できれば、このようなミスを防ぐために、強い静的な型付けがほしい。つまり、C++でいう、enumのような機能があればよい。そして、型が違った場合、コンパイルエラーになるようにしてほしい。

しかし、どうも、強い静的な型付けを導入してしまうと、Javascriptの理念に反するような気がしてならない。

不思議だ。私はC++によるバイアスを受けていると言える。とすれば、強い静的型付けは、諸手を上げて歓迎すべきものである。にもかかわらず、Javascriptに強い静的型付けが入ることに、ものすごい違和感を感ずる。

たとえば、クラスという機能もそうだ。Javascriptに、言語機能としてのクラスを導入してしまうと、どうもそれは、Javascriptの理念に反するような気がしてならない。

ところで、私が、Javascriptの理念上、どうしてもなくてはならないと感ずる機能は、letである。Mozillaの拡張機能である、block scope letが、どうしても欲しい。letがあれば、コードが非常に読みやすくなる。

No comments: