Drkcore

10 02 2006 perl designpattern Tweet

Iterator::Utilをつかってみた ( デザパタPerl )

イテレータのサンプルを実際に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での例も参考にしてます。 間違いの指摘とか、もっといいやり方教授してくれたらとても嬉しいゾ。

ProductName 増補改訂版Java言語で学ぶデザインパターン入門
結城 浩
ソフトバンククリエイティブ / 3990円 ( 2004-06-19 )


About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021