JavaScriptのクラスの書き方の考察

 つぶやき, プログラム
 公開日:2013年5月4日 / 更新日:2013年9月16日

前回の続きです。
今回はさらに考察を進めてみました。

JavaScriptの「クラス」の書き方は大きく分けて、
prototypeなスタイル、

closureなスタイル

の2つになりそうです。
それぞれの長所と短所を考えてみます。

prototypeなスタイルでは、
どんなプロパティやメソッドがあるのかが
closureなスタイルに比べて見やすい傾向。

prototypeなスタイルでは、
メソッドの定義は一度だけだが、
closureなスタイルではインスタンスをnewする度に
定義することになる。

closureなスタイルでは、
ソースがコンパクトになる。
タイピング量も少ない傾向。

closureなスタイルでは、
privateな変数や関数が設定しやすいので、
カプセル化という観点では有利。

prototypeなスタイルでは
後でメソッドを追加した場合は、
既に生成した全てのインスタンスが影響受けるが
(追加メソッドが利用可能となる)
closureなスタイルでは、
以降に生成されるインスタンスだけに影響する。
当然こうなるわけですが、
プログラム組む上で大きな違いとなりますね。

そんな感じで一長一短なので、
書き方をどちらかに統一するとしたら
なかなか悩ましい。
ハイブリッドな感じもアリかも。

個人的にはclosureスタイルが好みなのですが、
newする度にメソッドが定義されるのは、
そのぶん余計にメモリとかCPU時間とかを
喰いそうなのが気になりますね。
検証したわけではないのですが・・・。

公開されているライブラリとか参照してみると、
prototypeスタイルが大勢な感じがします。

突き詰めると、publicなものは
書き換えることが出来てしまうJavaScriptでは、
privateな変数や関数を使って
カプセル化して行儀良い感じに作っても、
汚染できるものは汚染できてしまうわけです。
結局のところ、
規則を決めて運用することになってしまいそうですね。

ということで個人的な結論。
基本はprototypeなスタイルで書くが、
ケースバイケースでclosureなスタイルも検討する。
一個くらいしかインスタンスを生成しないようなクラスなら
closureスタイルで構わないかも。

コメント投稿