第105章へようこそ。
今日のテーマは「型で状態を表現する」です。
第59章で型状態パターンを紹介しました。
ジェネリックパラメータのマーカー型で、状態を型に埋め込むパターン。
今日は、より広い視点で「型による保証」を考えます。
データ構造が、本来ありえない組み合わせを許してしまうことがある。
たとえば、ログインしていないのにメール確認済みになっている。
接続が切れているのにデータを送信しようとしている。
コードの上では表現できてしまうが、意味としては矛盾している。
こうした不正な状態を防ぐ方法は二つ。
一つは、実行時にチェックする方法。
if文で条件を調べ、不正ならエラーを返す。
もう一つは、コンパイル時に排除する方法。
不正な状態を型で表現できない構造にすれば、コンパイラがそれを弾く。
実行時チェックは、テストで検証する。テストに漏れがあれば、不正な状態はすり抜ける。
コンパイル時保証は、型の設計で検証する。設計に漏れがあれば、不正な状態はやはりすり抜ける。
Rustの型システムは、多くの不正な状態をコンパイル時に排除する力を持っています。
その力をどこまで使うか。これが設計判断です。