osiire’s blog

ふしぎなそふとやさん

排他的状態

排他的な状態を表現するにはバリアントを利用した方がいいと思う。例えば、ある描画可能オブジェクトがドラッグ中なのか変形中なのか、あるいはそのいずれでもないのか、これらは互いに排他的な遷移状態。だから、

  type t = IDLE | DRAGGING | TRANSFORMING

と定義すればいい。これを

  type t = { is_idle : bool;
             is_dragging : bool;
             is_transforming : bool; }

なんてやってしまうと、idleかつdraggingかつtransformingという「なんやねん、それ」状態が存在してしまう。

いや、かなり技術力がある人が書いたコードが意外にも状態をレコード(実際にはC++のコード)で表現していて、つい。今は反省している