← 解説「Result<T, E> — 回復可能なエラー」に戻る
サンプルコードで身につける: Result<T, E> — 回復可能なエラー
解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。
1Ok と Err を返す最小の関数
成功なら Ok(値)、失敗なら Err(メッセージ) を返す、いちばん素朴な Result の形です。Option との違いは「なぜ失敗したか」をエラー値として持てることです。呼び出し側は match で両方のケースを必ず処理します。
Rust
2標準ライブラリの parse は Result を返す
文字列を数値に変換する parse は、失敗しうるので Result を返します。自作関数だけでなく、標準ライブラリの失敗しうる操作はほぼすべてこの形だと体感する例です。Err に入っているエラー値も {} でそのまま表示できます。
Rust
3複数の検証ルールと早期リターン
検証ルールが複数あるときは、違反を見つけた時点で return Err(...) して抜けるのが読みやすい形です。どのルールに違反したかがエラーメッセージとして呼び出し元に届きます。フォーム入力やAPIリクエストの検証処理がまさにこの形になります。
Rust
4enum で独自のエラー型を作る
エラーの種類が複数あるなら、文字列ではなく enum でエラー型を定義すると、呼び出し側が match でエラーの種類ごとに対応を分けられます。「見つからない」と「権限がない」で挙動を変えるような分岐が型安全に書けます。実務のライブラリやAPIクライアントのエラー設計の基本形です。
Rust
5失敗をスキップしながらバッチ処理する
複数件のデータを処理するとき、Result を match でさばけば「失敗した行はスキップして続行し、最後に件数を報告する」が自然に書けます。例外機構と違い、1件の失敗で全体が止まらない設計が標準になります。CSV の取り込みやログの集計など、実務のバッチ処理の典型です。
Rust