🔀
Enum、Option、Result — Rustの代数的データ型
nullのない世界を作る型システム
C/Javaのenumは整数定数の列挙だ。Rustのenumは各variantが異なる型のデータを持てる — 代数的データ型(ADT)と呼ぶ。
Option<T> = Some(T) | None。null の代わりに使う。値がない可能性がある箇所にOptionを使えばコンパイラがNone処理を強制する。NullPointerExceptionを根本から遮断。
Result<T, E> = Ok(T) | Err(E)。例外の代わりに使う。前述のエラー処理の基盤。
この2つの型がRustコードのほぼ全てに登場する。これを自然に扱えるようになることがRustに慣れる核心だ。
キーポイント
1
enumはvariant別に異なるデータを持てる
2
Option<T>でnullを代替 — None処理をコンパイラが強制
3
Result<T, E>で例外を代替 — エラーが型に明示
4
matchで全variantをexhaustiveに処理
メリット
- ✓ null/exceptionランタイムエラーを根本から遮断
- ✓ matchのexhaustive検査で漏れのない分岐
デメリット
- ✗ Option/Resultを展開するボイラープレートがある
ユースケース
DBクエリ — find_by_id()がOption<User>を返す
状態マシン — enumのvariantが各状態を表現