前回、私は底抜けにマヌケなミスを犯してしまった。ある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:
Post a Comment
You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.