44

Rust では、回復可能なエラーを処理する慣用的な方法は Result を使用することだと思います。たとえば、この関数は明らかに慣用的です。

fn do_work() -> Result<u64, WorkError> {...}

もちろん、単一の明らかな失敗状態を持つ関数もあるため、代わりに Option 型を使用します。慣用的な例は次のとおりです。

fn do_work() -> Option<u64>

これはすべて、ドキュメントで直接対処されています。ただし、関数が失敗する可能性があるが、成功した場合に意味のある値がない場合については混乱しています。次の 2 つの関数を比較します。

fn do_work() -> Option<WorkError>
// vs
fn do_work() -> Result<(), WorkError>

これらのどれがより慣用的であるか、または実際のRustコードでより頻繁に使用されているかはわかりません. このような質問に対する私の頼りになるリソースは Rust の本ですが、これは「エラー処理」セクションでは扱われていないと思います。他の Rust ドキュメントについてもあまり運がありませんでした。

もちろん、これはかなり主観的なものに思えますが、どのフォームが慣用的であるか、またはあるフォームが他のフォームよりも優れている (または劣っている) 理由について述べている信頼できる情報源を探しています。(また、Go や Haskell など、「値としてのエラー」を多用する他の言語とこの規則を比較する方法にも興味があります。)

4

2 に答える 2