Featured image of post Undoが1回しか効かないPerlのテキストエディタを、Mooで育ててCommandパターンにたどり着く全10回【目次】

Undoが1回しか効かないPerlのテキストエディタを、Mooで育ててCommandパターンにたどり着く全10回【目次】

Perl と Moo で簡易テキストエディタを作りながら、1回しか戻せない Undo を操作オブジェクトで何度でも戻せるようにし、Redo とマクロを足して、最後に Command パターンだと名前を付ける全10回の連載の目次です。どこから読むか、困りごとからも選べます。

Perl と Moo で、Undo・Redo・マクロを備えた簡易テキストエディタを作っていく全10回の連載です。挿入と削除だけの Editor クラスから始め、直前のテキストを1つ取っておくだけの Undo が2回目で止まるところで、操作そのものをオブジェクトにして履歴に積む方法に切り替えます。undo メソッド、Moo::Role による約束、History クラス、Redo、マクロと足していき、対話型のエディタに仕上げたあと、第10回で、作ってきたものが Command パターンだと名前を付けます。

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

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

どこから読むか

  • 第1回 — Undo の仕組みを、何も無いところから順に組み立てたいなら。第2回で、素朴な Undo が破綻するのを確かめる
  • 第3回 — 「操作をオブジェクトにする」とはどういうことかを知りたいなら。第4回で undo を持たせ、何度でも戻せるようにする
  • 第6回 — Undo と Redo を2つのスタックで管理する形を見たいなら。前提は第4回の execute と undo の対で、redo は第7回で足す
  • 第10回 — Command パターンの役割分担から入りたいなら。作ったクラスとの対応を先に見られる

困りごとから探す

Undo が1回しか効かない、何度でも戻せない

  • 第2回 — 直前のテキストを保存する Undo が、2回目で止まる
  • 第3回 — 戻すためにテキスト全体を毎回コピーしていて、重い
  • 第4回 — 削除した文字を、元の位置に戻したい

コマンドを増やすと、どこかで壊れそう

  • 第5回 — 新しいコマンドで undo を書き忘れても、Undo するまで気づけない

履歴の出し入れが、メイン処理に散らばっている

  • 第6回 — push と pop があちこちにあって、Redo 用のスタックを足す場所がない

やり直しや、まとめての取り消しができない

  • 第7回 — Undo しすぎた操作を、やり直したい
  • 第8回 — 複数か所の置換を、1回の Undo で戻したい

部品はあるのに、エディタとして動かせない

  • 第9回 — クラスをまとめて、対話的に操作できるスクリプトにしたい

作った仕組みに名前があるのか知りたい

  • 第10回 — 操作をオブジェクトにして履歴に積む設計が、Command パターンのどこに当たるのか言えない
  • 第10回 — Command パターンと Strategy パターンの違いを説明できない

全話一覧

関連シリーズ

変数とサブルーチンだけのPerlを、Mooのクラスで整理する(このシリーズの前提)

振る舞いをオブジェクトにする、もう1つの全12回(Strategy)

参考リンク

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