Tags
413 ページ目
Moo
どのエクスポーターもexportを持っているのは、たまたまだ。Moo::Roleのrequiresで約束にする【ロール】
4形式の出力処理が1つのif/elseに詰まっている。形式ごとにexportを持つCsvExporterとJsonExporterに分ける【責務分離】
形式を足すたびにelsifが伸び、CSVを直すだけでも全形式の処理に触れる。if/elseの肥大化を確かめる【条件分岐の悩み】
CSVとJSONで書き出すPerlのデータエクスポーターを、一から作る。まずはif/elseで形式を切り替える【if/else】
Undoが1回しか効かないPerlのテキストエディタを、Mooで育ててCommandパターンにたどり着く全10回【目次】
操作をオブジェクトにして履歴に積む設計には、Commandという名前がある。作ったクラスを5つの役割に当てはめる【Commandパターン】
部品はそろったのに、まだエディタとして触れない。i・d・u・rを受け付ける対話型のCLIエディタに仕上げる【統合】
3か所の置換を戻すのに、Undoを3回押すことになる。複数のコマンドを1つにまとめるMacroCommandを作る【マクロ】
Undoで取り消した操作を、やり直せない。redo_stackから取り出してexecuteし直すredoをHistoryに足す【Redo】
pushとpopがメイン処理に散らばって、Redoを足す場所がない。履歴の出し入れをHistoryクラスにまとめる【Historyクラス】
undoを書き忘れたコマンドは、Undoするまで壊れていることに気づけない。Moo::Roleのrequiresで約束にする【ロール】
操作を記録しても、まだ元に戻せない。executeと対になるundoをInsertCommandとDeleteCommandに持たせる【undoメソッド】
何度でも戻すために、テキスト全体を毎回コピーするのは重い。「何をしたか」をInsertCommandにして記録する【操作オブジェクト】
直前のテキストを1つ取っておくUndoは、2回目で止まる。previous_textが破綻する理由を確かめる【履歴の必要性】
Undo/Redo付きのエディタを、PerlとMooで一から作る。まずはinsertとdeleteだけのEditorクラス【Editorクラス】
1
…
23
24
25
…
28