'Result' とは?
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 42/66。
Optionが値の不在を扱う一方で、Rustは、異なるものの同様に重要なシナリオ、つまり失敗する可能性のある操作のために、もう一つの列挙型を提供しています。Result<T, E>を紹介します。これは、回復可能なエラーを処理するためのRustの主要なツールです。
Result 列挙型には、操作の結果を表す2つのバリアントがあります。
enum Result<T, E> {
Ok(T), // 成功 - 成功した結果が含まれます
Err(E), // 失敗 - エラー情報が含まれます
}操作が成功すると、成功した結果を含むOk(value)を返します。失敗すると、何が問題だったかに関する情報を含むErr(error)を返します。このように成功と失敗のケースを明示的に処理することで、Rustプログラムはより信頼性が高く、予測可能になります。
Rustの至る所でResultに遭遇することになります。ファイルが見つからないために失敗する可能性のあるファイル操作から、タイムアウトする可能性のあるネットワークリクエスト、無効な入力を受け取る可能性のあるパース操作まで、様々です。例外を使用する言語とは異なり、Rustは操作が失敗する可能性があることを認め、両方の結果を明示的に処理することを強制します。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チートシート
Result<T, E> 列挙型は、失敗する可能性のある操作を処理します:
enum Result<T, E> {
Ok(T), // 成功 - 成功した結果が含まれます
Err(E), // 失敗 - エラー情報が含まれます
}操作が成功すると、Ok(value) を返します。失敗すると、Err(error) を返します。
Result は、ファイル操作、ネットワークリクエスト、パース操作などの回復可能なエラーに使用されます。Rustでは、成功と失敗の両方のケースを明示的に処理する必要があります。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Logic & Flowのすべてのレッスン
7'Result' によるエラーハンドリング
'Result' とは?'Result' で 'match' を使うis_ok() と is_err()ショートカット: unwrap と expectクエスチョンマーク演算子 '?'文字列から数値へのパースまとめ - 安全な除算関数