10 02 2006 perl designpattern Tweet
イテレータのサンプルを実際にIterator::Utilモジュール使って書いてみたゾ。
今回、用意したのはBook,BookShelf,mainだ。インターフェースにあたる部分は省略ってことで。
Bookはサンプルのコードをそのまま使用してます。 BookShelfはbooksメソッドで配列返すようにしといた。
package BookShelf;
use strict;
sub new {
my $class = shift;
my $self = {};
$self->{maxsize} = shift;
$self->{books} = [];
$self->{last} = 0;
bless $self, $class;
}
sub appendbook {
my $self = shift;
my $book = shift;
$self->{books}->[$self->{last}] = $book;
$self->{last}++;
}
sub books {
my $self = shift;
$self->{books};
}
1;
mainでIterator::Utilを呼ぶ。
!/usr/bin/perl
use strict;
use BookShelf;
use Book;
use Iterator::Util;
my $bookshelf = BookShelf->new(5);
$bookshelf->appendbook(Book->new('Java言語で学ぶデザインパターン入門'));
$bookshelf->appendbook(Book->new('憂鬱なプログラマのためのオブジェクト指向開発講座'));
$bookshelf->appendbook(Book->new('かんたんUML'));
$bookshelf->appendbook(Book->new('プログラミングPerl'));
$bookshelf->appendbook(Book->new('オブジェクト指向Perlマスターコース'));
my $it = iarray ($bookshelf->books);
while (my $book = $it->value) {
print $book->getname."n";
}
実行結果はこんな感じ。最後のIterator is exhaustedがちょっと気持ち悪い。
$ perl main.pl
Java言語で学ぶデザインパターン入門
憂鬱なプログラマのためのオブジェクト指向開発講座
かんたんUML
プログラミングPerl
オブジェクト指向Perlマスターコース
Iterator is exhausted at main.pl line 18
増補改訂版Java言語で学ぶデザインパターン入門のあなたの考えを広げるためのヒント(ここがおもろい)には、
実装とは切り離して数え上げできることが重要
とか書いてあるので、まぁ、これでいいのかな。
このエントリは結城浩さんの本と、それに載っているサンプルをPerlで書いた例をみながら考えたことをメモってます。あとは、はてなの伊藤さんのjavascriptでの例も参考にしてます。 間違いの指摘とか、もっといいやり方教授してくれたらとても嬉しいゾ。