問題一覧に戻る
中級エラー処理
問題47: Result型
Result'<'T, E'>'は成功またはエラーを表現する型で、Rustのエラーハンドリングの中核です。Ok(T)は成功した値、Err(E)はエラー情報を保持します。ファイル操作やネットワーク通信など、失敗する可能性がある操作で使用されます。matchやif letで処理し、?演算子で早期リターンも可能です。
use std::fs::File;
fn divide_numbers(a: i32, b: i32) -> <i32, String> {
if b == 0 {
("Division by zero".to_string())
} else {
(a / b)
}
}
fn main() {
// Result型を使用
let result = divide_numbers(10, 2);
// Result型のマッチング
match result {
(value) => println!("Result: {}", value),
(e) => println!("Error: {}", e),
}
// ?演算子
let file_result = File::open("test.txt");
if let (file) = file_result {
println!("File opened successfully");
} else {
println!("Failed to open file");
}
}