第103章へようこそ。
今日のテーマは「閉じた世界と開いた世界」です。
Rustで「複数の種類を一つの型として扱いたい」とき、選択肢が二つあります。
enumで、すべてのバリアントを列挙する。
トレイトオブジェクトで、共通の能力だけを定義する。
どちらでも「異なる種類を統一的に扱う」ことはできます。
しかし、設計の意味がまったく異なる。
enumは、閉じた世界を作ります。
バリアントの一覧は定義の中に固定されている。後から追加するには定義を変更するしかない。
トレイトオブジェクトは、開いた世界を作ります。
トレイトを実装すれば、どんな型でも参加できる。後からいくらでも増やせる。
この「閉じている」か「開いている」かが、設計判断の出発点です。