🦀
Rustでの基本的なエラーハンドリング
Rustエラーハンドリング入門
この記事では、Rustのエラーハンドリングにおける5つの主要なメソッドについて解説しています。
概要
Rustプログラミング言語は、強力なエラーハンドリングの仕組みを持っています。エラーハンドリングはプログラムの安全性と堅牢性を高め、デバッグを容易にする重要な部分です。この記事では、Rustのエラーハンドリングの基本である5つの主要なメソッドを初心者向けに解説します。それぞれのメソッドの使い方と特性を理解することで、より効果的なコードを書くための基礎を身に付けることができます。
目次
unwrap
unwrap
は、Result
またはOption
がOk
またはSome
であれば値を返し、そうでなければパニックします。
let some_value: Option<i32> = Some(42);
let unwrap_value = some_value.unwrap(); // 42
let none_value: Option<i32> = None;
let panic_none_value = none_value.unwrap(); // panic!
expect
expect
はunwrap
と同じように動作しますが、エラーメッセージをカスタマイズできます。
let some_value: Option<i32> = Some(42);
let expect_some_value = some_value.expect("Failed to find a value"); // 42
let none_value: Option<i32> = None;
let panic_none_value = none_value.expect("Failed to find a value"); // panic! エラーメッセージ: "Failed to find a value"
?
?
演算子は、Result
がErr
の場合に早期リターンします。関数の戻り値がResult
である必要があります。
fn get_value() -> Result<i32, &'static str> {
let value: Result<i32, &'static str> = Err("An error occurred");
let unwrapped = value?; // 早期リターン
Ok(unwrapped)
}
unwrap_or
unwrap_or
は、Result
またはOption
がOk
またはSome
であれば値を返し、そうでなければデフォルト値を返します。
let some_value: Option<i32> = Some(42);
let unwrapped_or_default_some = some_value.unwrap_or(0); // 42
let none_value: Option<i32> = None;
let unwrapped_or_default_none = none_value.unwrap_or(0); // 0
unwrap_or_else
unwrap_or_else
は、unwrap_or
に似ていますが、クロージャを使用してデフォルト値を計算します。エラーが発生した場合に、このクロージャが呼び出され、クロージャの戻り値が最終的な結果として返されます。
let value: Result<i32, &str> = Err("An error occurred");
let unwrapped_or_else = value.unwrap_or_else(|err| {
println!("Error: {}", err);
0
}); // Error: An error occurred, 0
まとめ
-
unwrap
成功した場合の値を返し、失敗した場合はパニック。 -
expect
unwrap
と同じ動作だが、失敗時のエラーメッセージをカスタマイズ。 -
?
成功した場合は値を返し、失敗した場合は関数から早期リターン。 -
unwrap_or
成功した場合の値を返し、失敗した場合はデフォルト値を返す。 -
unwrap_or_else
unwrap_or
と同じ動作だが、失敗時にクロージャを使用してデフォルト値を計算。
これらのメソッドは、エラーハンドリングの方法やシチュエーションに応じて選択できる選択肢を提供します。Rust初心者のうちにこれらのメソッドを理解し適切に使用することが重要になるかと思います。
Discussion