Saturday, January 13, 2007

Programming::Javascript - 少し冷静になって作ってみる

こちらで書いたとおり、 _super()でスーパークラスのコンストラクタ呼び出しが可能なのは相変わらずです。ただ、_SUPERキーワードを使ってスーパークラスのメソッドを呼び出そうという試みで、正しくスーパークラスのメソッドが呼び出されるよう_SUPER.method(arg)を字句解析を用いて探し出し、変形させてやろうとしていたのですが…計算コストが高くつくのと、何か微妙にバグがとれずにいたので、実装するのに少し萎え気味になりました。デバッグが著しく面倒ですからね、JavaScript周りは。せっかく軽量で分かりやすいライブラリを目指しているのに、字句解析とか導入して重くなるのは嫌です、やっぱり。

Core JavaScript 1.5 Guide:Class-Based vs. Prototype-Based Languagesで、プロトタイプベース言語とクラスベース言語の比較について述べてあります。まー、JavaScriptプロトタイプベースの言語なんだから、無理にクラスベースの言語の使用に近づけなくても良い、というかむしろそれは良くないんかなぁっていう気がしてきました。これを読んだからだけでなく、クラスベース言語と同じようなことをしようとして、結果的に計算コストが高くつくようになってしまったことも、このような考えに至った原因の一つですが。

計算コストは恐らく、すんごいコーダーの手に掛かればもっと削減できるのでしょうが。スーパークラスのコンストラクタ呼び出しは結構使うと思うんで、これは削除せずに置いておきます。_SUPERキーワードを使ったスーパークラスのメソッド呼び出しは、サブクラスでオーバーライドしたメソッド内で、オーバーライドされる前のメソッドを呼び出したいときなんかは重宝するかなと思ったのですが。もうちょっと他の方法を考えてみて、出来そうだったら実装してみようかなと思っています。

No comments: