指向性メモ::2005-02-23

ページ情報
制作日
2005-02-23T05:36:37+09:00
最終更新日
2005-10-07T09:02:41+09:00
ページ内目次

JavaScriptでデザインパターン

Created:
2005-02-23T05:36:37+09:00

Adaのクロスコンパイラをmakeしている間暇だったので試しに書いてみた。JavaScriptの復習もかねて。

まずはIterator。

function BookShelf() {
    this.books = new Array("空ノ鐘の響く惑星で", "半分の月がのぼる空", "君の嘘、伝説の君");
}

function BookShelf.prototype.getIterator() {
    return new BookShelfIterator(this);
}

function BookShelfIterator(of) {
    this.shelf = of;
    this.counter = 0;
}

function BookShelfIterator.prototype.hasNext() {
    if (this.counter < this.shelf.books.length) {
        return true;
    } else {
        return false;
    }
}

function BookShelfIterator.prototype.next() {
    var value = this.shelf.books[this.counter];
    this.counter++;
    return value;
}


// 実際に使う側の処理
var ShelfDemo = new BookShelf();
var ItrDemo = ShelfDemo.getIterator();

while (ItrDemo.hasNext()) {
    print("『" + ItrDemo.next() + "』"); // printは適当に定義するべし
}

「配列booksを返すメソッドを作って回せばいくない?」っというツッコミもあるだろうけど、もしデータの格納方法を配列じゃなくて違うオブジェクトにした場合、配列専用の構文で書いてあると、その部分を変更しなくちゃならなくなる。その点、Iteratorを使えば回す部分の処理は常に一定なので安心。

次、よく使うFactory。

function Factory() {
}

function Factory.prototype.create() {
    return new Item();
}

function Item() {
    this.name;
}

function Item.prototype.setName(newName) {
    this.name = newName;
}


// 実際に使う側の処理
var fact = new Factory();

var item1 = fact.create();
item1.setName("Item1");
var item2 = fact.create();
item2.setName("item2");

「その都度itemnewすればよくね?」とか。いやいや、そうすると、クラス「Item」が「NewItem」に変更されたらその部分全部書き換えなきゃいけません。このデザインパターンだと実際にnewしている部分は1ヶ所なので一気に変更できます。DOM使ったことがある人はcreateTextNodeとかもFactoryパターン。

っと、2つ程書いてmakeが終わってしまったので今日はここまで。気が向いたらまた書くかも。

Comments
3
Trackbacks
0
PermaLink
http://yudai.arielworks.com/memo/2005/02/23/053637

XSLT in Ada

Created:
2005-02-23T23:17:44+09:00

configuremake hogeを永遠と繰り返すのに嫌気が差してきたので、とりあえずクロスコンパイラは後回しにして、Adaを実際に使う方向に進もうと思う。

Adaをつかって何をするか、といえば、やはりXML関係というか、ウェブアプリ系だろう。Windows用のアプリをつくるなら素直にC++なりを使った方が早いと思うし。というわけで、まずは僕らの生命線、XSLTを使える環境を作ろうと思う。

微妙に需要があるのか無いのか、Googleで検索してみるとすぐにSablotronとlibxslt用のラッパーが見つかった。早速ソースコードをダウンロードしてみる。Sablotは嫌いなので、PHP5と同じlibxsltを使う方針で行ってみよう。

とりあえず、gnatmake test_xslt.adbと打ってコンパイルしてみる。と、当然だがlibxslt本体が足りない旨のエラーメッセージがgnatlinkの段階で表示される。libxslt本体をダウンロードしてこよう。――えっと、どれをダウンロードしてどこに置けばいいのかな?

必要なのはWindows用のDLLでは無いことは確かなんだけど、ソースコードをダウンロードしてみても、どこに置けばいいのかが分からない。readmeを読んで書いてないし。configureなりmakeなりしないといけないのだろうか。こういうところでCの知識が無いと不便だな。

んー、色々実験してみないと先に進めなさそうだな。

Comments
0
Trackbacks
0
PermaLink
http://yudai.arielworks.com/memo/2005/02/23/231744

祈り

Created:
2005-02-23T23:31:08+09:00

オーケー、17に誓おう。だから頼むぜ。

Comments
0
Trackbacks
0
PermaLink
http://yudai.arielworks.com/memo/2005/02/23/233108
連絡先、リンク、転載や複製などについては『サイト案内』をご覧ください。Powered by HIMMEL

I ♥ Validator