🔀

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が各状態を表現