Rust by Example

16 エラーハンドリング

エラーハンドリングとは失敗の起きる可能性を扱うプロセスのことです。例えば、ファイルを読み込むのに失敗した際、その誤ったインプットを使い続けるのは明らかに問題です。エラーハンドリングによって、そのようなエラーに気づき、よりきれいな方法で扱い、残りのプログラムに問題が波及することを防ぐことができるようになります。

これから見ていく中で、最もシンプルなエラーハンドリングの方法はpanicです。これはエラーメッセージをプリントし、タスクのアンワインドを開始し、典型的にはプログラムを終了します。例えば以下の例を見てみましょう。

fn give_princess(gift: &str) { // お姫様はヘビが大嫌いです。拒絶の意思をお示しに // なられたなら、直ちにストップしなくてはなりません。 if gift == "snake" { panic!("AAAaaaaa!!!!"); } println!("I love {}s!!!!!", gift); } fn main() { give_princess("teddy bear"); give_princess("snake"); }

このように我々はプログラムを意図的に失敗させることができます。しかし次のような疑問が生じます。もしお姫様への贈り物がなかったらどうなるのでしょう。ヘビを与えたのと同じように、空の文字列("")を与えることで明示的なテストを行うことが可能ですが、これは現実的ではありません。コンパイラがチェックしない限り、こういったテストをプログラマは習慣的に書かないためです。

こういった状況に対処するため、贈り物が存在しないかもしれない場合というのをコンパイラに教えてあげたくなりますね。この章ではOptionを用いてこういった状況に対処する方法を学びます。1つ以上のOptionの結果を扱う関数群も紹介します。

訳注: こちらのQiitaの日本語記事も参考になります。「RustでOption値やResult値を上手に扱う」