機体同士の直接通信をやめ、すべてを管制塔 (ControlTower) 経由にする。参照が N 本で済み、新しい機体を足しても既存のコードを直さずに済む。Perl と Moo で実装する。
2機が同時に着陸を要求しても、今のコードは何も調整せず両方を通してしまう。航空機同士を直接つなぐ方法を試し、参照が N×(N-1) 本に増えて破綻するのを確かめる。
Perl と Moo で航空管制シミュレーターを作る連載の第1回。便名を持ち、離陸と着陸ができる最小の Aircraft クラスを書いて、飛行機を飛ばす。
Perl と Moo で TRPG のダイス記法 (2d6+3) を解釈するインタプリタを作る全8回の連載。目次を兼ねた案内板で、読む回の選び方と各回の内容をまとめています。
終端式・非終端式・式ツリーで作ってきたダイス言語は、GoF の Interpreter パターンそのもの。各クラスとパターンの登場人物を対応づけ、近いパターンとの違いも整理する。
式を手で組み立てる段階から、文字列を渡せば式ツリーができる段階へ。正規表現で分解する簡易パーサーを作り、ダイス言語インタプリタを Perl と Moo で完成させる。
SubExpr と MulExpr を新しいクラスとして足すだけで、AddExpr も DiceExpr も触らずに四則演算へ広げられる。開放閉鎖の原則 (OCP) を、Perl と Moo のコードで確かめる。
eval の実装を忘れたクラスは、実行して呼ぶまでエラーにならない。Moo::Role の requires で全ての式クラスに eval を必須にし、書いた時点で気づけるようにする。
「+」を左辺と右辺を持つ AddExpr クラスにすると、式を木構造で組み立てられる。2d6+3 を再帰的に評価する「非終端式」を、Perl と Moo で作る。
if/else に詰め込んだ処理をやめ、数値 (NumberExpr) とダイス (DiceExpr) を別々のクラスにして eval で値を返させる。これが「終端式」。Perl と Moo で実装する。
ダイス記法に加減乗除を足そうとすると、正規表現と if/else が組み合わせの数だけ増えていく。Perl で書いたコードで、なぜ破綻するのかを実際に確かめる。
TRPG のダイス記法「2d6」を文字列から読み取り、実際に振って合計を返す。Perl と Moo で、最小限の Dice クラスを作るところから始める。
Perl と Moo で Markdown 変換ツールを作りながら、if/else が増え続ける問題を Visitor パターンで解く全8回の連載。目次を兼ねた案内板で、読む回の選び方と各回の内容をまとめています。
シリーズで作り上げた accept と visit の設計を、GoF の Visitor パターンの定義と見比べる。Double Dispatch の本質と、使いどころ、SOLID 原則との関係を Perl と Moo のコードで振り返る。
ドキュメントに対してやりたい操作は変換だけではない。単語数を数える WordCounter とリンクを取り出す LinkExtractor を足し、複数の Visitor が同じ要素構造の上で共存できることを Perl と Moo で確かめる。