2012-03-14

CoffeeScriptで書いた後で思ったこと

CoffeeScriptの構文が美しいことに感動して、小さなプログラムを書いてみました。遊びでこっそり書くプログラムではなく、公開するつもりのプログラムです。
それで気づいたのは、JavaScriptで書いてもほとんど同じだということです(jQueryを使ったからかもしれません)。

ひとつだけ大きく違ったのは、何の迷いもなく、クラスをきれいに書けるということです。
しかし、JavaScriptでも、継承のやり方さえ決めてしまえば、それなりに可読性の高いコードを書けるような気もします。
デバッグのことを考えると、やはりCoffeeScriptよりも、JavaScriptのほうが有利です。

JavaScriptで継承をどんな風に書くか考えてみます。CoffeeScriptのプログラムをJavaScriptで書きなおしてみるかもしれません。

次のように create関数を定義して、これでオブジェクトの生成や継承をやることすれば、JavaScriptでもコードがすっきりするように思います。継承をするときは、createで生成して、extendで差分を定義します。newを隠蔽しているあたりは、クラス型の継承ではなく、プロトタイプ型の継承と言ってよいかと思います。
var create = function(proto) {
    var Meta = function() {};
    if (undefined !== proto && null !== proto) {
        Meta.prototype = proto;
    }
    var obj = new Meta();
    obj.__meta__ = Meta;
    obj.extend = function(obj) {
        for (var m in obj) {
            this[m] = obj[m];
        }
        return this;
    };
    return obj;
};

使い方は以下のような具合です。
var base = create({
    name: function() {return "this is base";}
});
var derived = create(base).extend({
    name: function() {return "this is derived";}
});
クラスを使わずにオブジェクトから直接オブジェクトを生成するイメージですが、var d1 = creat(derived); var d2 = create(derived); というようにできるので、とくに困ることはなさそうです。

0 件のコメント: