Result
Result は Option に似ていますが、操作の成功または失敗を、それぞれ 異なる enum バリアントで表します。これはジェネリックで、Result<T, E> の形を取り、T は Ok バリアントで使われ、E は Err バリアントに現れます。
// Copyright 2023 Google LLC // SPDX-License-Identifier: Apache-2.0 use std::fs::File; use std::io::Read; fn main() { let file: Result<File, std::io::Error> = File::open("diary.txt"); match file { Ok(mut file) => { let mut contents = String::new(); if let Ok(bytes) = file.read_to_string(&mut contents) { println!("Dear diary: {contents} ({bytes} bytes)"); } else { println!("Could not read file content"); } } Err(err) => { println!("The diary could not be opened: {err}"); } } }
Optionと同様に、成功した値はResultの中に入っているため、 開発者はそれを明示的に取り出す必要があります。これはエラーチェックを 促します。エラーが決して発生しないはずの場合は、unwrap()やexpect()を 呼び出すことができ、これも開発者の意図を示すシグナルになります。Resultのドキュメントは一読を勧めます。講義中に読むものではありませんが、 言及する価値はあります。関数型スタイルのプログラミングに役立つ便利な メソッドや関数が数多く含まれています。- 4日目で見るように、
Resultはエラーハンドリングを実装するための 標準的な型です。