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");
「その都度itemをnewすればよくね?」とか。いやいや、そうすると、クラス「Item」が「NewItem」に変更されたらその部分全部書き換えなきゃいけません。このデザインパターンだと実際にnewしている部分は1ヶ所なので一気に変更できます。DOM使ったことがある人はcreateTextNodeとかもFactoryパターン。
っと、2つ程書いてmakeが終わってしまったので今日はここまで。気が向いたらまた書くかも。
configureとmake 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の知識が無いと不便だな。
んー、色々実験してみないと先に進めなさそうだな。
オーケー、17に誓おう。だから頼むぜ。