Featured image of post 内部の配列を見せずに、本を1冊ずつ取り出す。Perlの本棚アプリでIteratorパターンにたどり着く全5回【目次】

内部の配列を見せずに、本を1冊ずつ取り出す。Perlの本棚アプリでIteratorパターンにたどり着く全5回【目次】

Perl と Moo で本棚アプリを作りながら、内部の配列を使う側に見せずに本を1冊ずつ取り出す仕組みを組み立て、最後に Iterator パターンだと名前を付ける全5回の連載の目次です。どこから読むか、困りごとからも選べます。

Perl と Moo で蔵書を管理する本棚アプリを作り、本棚の中身(配列)を使う側に見せずに、本を1冊ずつ取り出す仕組みを組み立てていく全5回の連載です。Book と BookShelf の2クラスから始め、for ループでカプセル化が崩れるのを確かめ、Moo::Role で走査の約束を決め、本棚に iterator() を持たせます。第5回で、作ってきたものが Iterator パターンだと名前を付け、逆順の巡回を足します。

各回は前の回のコードに手を入れていく作りなので、通して読むなら第1回からが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で、順に追うなら「全話一覧」で選んでください。

対象は、Moo の has でクラスを書いたことがある方です。コードは Perl v5.36 以降(サブルーチンシグネチャ)で書いています。Moo が初めてなら、先に前シリーズ「Mooで覚えるオブジェクト指向プログラミング」の目次(このページの最後にリンクがあります)から読んでください。

どこから読むか

  • 第1回 — 複数のオブジェクトをまとめて持つクラスを書いたことがないなら。Book と BookShelf を作り、第2回でその本棚を全冊表示して問題を見つける
  • 第2回 — $obj->items->@* のように中身の配列を直接回していて、それの何がまずいのか知りたいなら。第3回・第4回で直していく
  • 第3回 — has_next と next で回すイテレータを自分で書いてみたいなら。第4回で本棚から取り出せるようにする
  • 第5回 — Iterator パターンの全体像から入りたいなら。4つの役割と本棚アプリのクラスの対応を先に見られる

困りごとから探す

オブジェクトを何個もまとめて扱う置き場がない

  • 第1回 — 本の追加・取り出し・冊数を、1つのクラスに任せたい

使う側のループが、集合体の中身の作りを知っている

  • 第2回 — $shelf->books->@* と書いていて、中身が配列でなくなると壊れる
  • 第2回 — get_book_at($i) に変えても、「番号で取り出せる」前提が残る

順に取り出す手順を、使う側から追い出したい

  • 第3回 — インデックスを数えるループが、あちこちに書かれている
  • 第3回 — 走査するクラスに、決まったメソッドを必ず持たせたい(requires)

走査クラスの名前に、使う側が縛られている

  • 第4回 — BookShelfIterator->new(...) と書かないと回せない

順番を変えて回したい・作ったものを説明できない

  • 第5回 — 逆順でも回したいが、ループは書き直したくない
  • 第5回 — 作ったクラスが、Iterator パターンのどの役割に当たるのか言えない

全話一覧

関連シリーズ

Moo のクラス・ロール・委譲を、掲示板アプリで1つずつ身につける(このシリーズの前提)

作ってから名前を知る、もう1つの全5回(Singleton)

参考リンク

comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。