「コードガーデナー」は、手入れの行き届かなくなった Rust のコードを、寡黙な庭師と見習いのヒバリが、剪定や接ぎ木のように少しずつ整えていく連載です。毎回違う依頼人が庭仕事の悩みを持ち込み、設計パターンで手入れをします。全12回、実装言語は Rust です。
このページは目次を兼ねた案内板です。初めてなら「まず読むなら」から、いま困っていることが決まっているなら「困りごとから探す」から、公開順に追いたいなら「全話一覧」から選んでください。
まず読むなら
- Builder — 同じ型の値が並ぶ注文欄で、引数の取り違えを防ぐ回。Rust の所有権と借用を最初に説明しているので、Rust に慣れていないならここから
- Decorator — 機能を足すたびに構造体が倍増する悩みを、
Box<dyn Trait>で外側から包んで解く回。トレイトとトレイトオブジェクトの説明がここにある - Strategy — 品種を足すたびに肥大化する
match関数に、任せる場所を持たせる回。条件分岐の膨張に覚えがあるなら
どの回から読んでも話は通じます。ただ、所有権・借用は Builder、トレイトは Decorator が初出で、後の回では詳しく説明し直さないので、Rust の言葉につまずいたらこの2本に戻ってください。
困りごとから探す
作り方がばらつく・間違えやすい
- Builder — 同じ型の値が並ぶ位置引数の取り違えを、名前をつけて一つずつ積む形で防ぐ
- Factory Method — 新しい品種を足すたびに同じ分岐へ手を入れる状態を、生まれ方を品種自身に持たせて解く
種類や機能が増えて膨らむ
- Decorator — 機能の組み合わせごとに構造体が増える状態を、外側から包んで解く
- Strategy — 一つの関数に積み上がる品種ごとの流儀を、任せる場所を分けて解く
- State —
boolフラグを増やすたびに生まれる「ありえない組み合わせ」を、型で一つに決めて防ぐ
単体と集まりで扱いが分かれる・歩き方が揃わない
手順や順序が人の頭の中にしかない
- Template Method — コピペした手順が少しずつずれていく状態を、骨格を一つに固定して解く
- Facade — 正しい呼び出し順を知っているのが先代だけの状態を、窓口の奥にしまって解く
後始末・巻き戻し・通知を確実にしたい
- RAII — 水やりと記録が別々の呼び出しで、二重や放置が起きる状態を、
Dropで役目の終わりに後片付けさせて解く - Memento — 逆操作で戻そうとして崩す状態を、切る前に状態そのものを預けておいて解く
- Observer — 通知先を検知コードに書き足し続ける状態を、知らせる相手を知らなくていい形にして解く
全話一覧
| 公開日 | パターン | 記事 |
|---|---|---|
| 8/11 | Builder | 鉢サイズと水やり頻度、同じ数字が並ぶ注文欄〜一つずつ確かめて、最後に一度だけ実らせる〜 |
| 8/12 | Decorator | 品種と機能、掛け算で増えていくクラスの数〜台木は一本、必要な性質だけを接ぐ〜 |
| 8/13 | Strategy | 剪定のやり方が、全部同じ関数に積み上がっていく〜品種ごとの流儀は、任せる場所を持たせる〜 |
| 8/14 | RAII | 当番は決めたのに、鉢だけがびしょ濡れか枯れかけになる〜世話係を一人に絞り、離れる瞬間に後片付けまで背負わせる〜 |
| 8/15 | Factory Method | 新しい品種を迎えるたび、同じ分岐にまた手を入れる〜生まれ方は、品種自身に持たせる〜 |
| 8/16 | Composite | 一株も、寄せ植え全体も、扱い方が毎回分かれる〜束ねても、一本と同じ手で触れる〜 |
| 8/17 | State | フラグを増やすたび、ありえない組み合わせも増えていく〜生育段階は、型で一つに決める〜 |
| 8/18 | Memento | 戻れないと知っていたら、あの一鋏は切れたか〜状態は、外へ漏らさず預けておく〜 |
| 8/19 | Observer | 害虫を見つけるたび、知らせる相手をコードに書き足す〜検知は、誰に知らせるかまで背負わなくていい〜 |
| 8/20 | Template Method | 株ごとにコピーした手順、気づけば水やりの順番までずれていた〜骨格は一つに決め、差分だけを預ける〜 |
| 8/21 | Facade | 土壌・灌漑・施肥、正しい順番を知るのは先代だけだった〜複雑な手順は、窓口の奥にしまっておく〜 |
| 8/22 | Iterator | 区画ごとに違う内部構造、巡回コードまで書き直してきた年末点検〜歩き方は、中身の形を知らなくていい〜 |
タグページ #code-gardener からも全12本をたどれます。
