Result型
表示
この項目「Result型」は翻訳されたばかりのものです。不自然あるいは曖昧な表現などが含まれる可能性があり、このままでは読みづらいかもしれません。(原文:英語版 "Result type" 2023年10月9日 (月) 03:37 (UTC)) 修正、加筆に協力し、現在の表現をより自然な表現にして下さる方を求めています。ノートページや履歴も参照してください。(2023年10月) |
関数型プログラミングにおいて、Result型(英語: Result type)は、戻り値またはエラーコードを保持するモナディック型である。これは、例外処理に頼らないエラー処理の洗練された方法を提供する。失敗する可能性のある関数がResult型を返す場合、プログラマは結果にアクセスする前に、結果が成功であるか失敗であるかを確認することが強制される。これにより、プログラマがエラー処理を忘れる可能性が排除される。
例
[編集]- Elmでは、標準ライブラリで
type Result e v = Ok v | Err e
として定義されている[1]。 - Haskellでは、慣例により、標準ライブラリで
data Either a b = Left a | Right b
として定義されているEither
型がこの用途に使用される[2]。 - Kotlinでは、標準ライブラリで
value class Result<out T>
として定義されている[3]。 - OCamlでは、標準ライブラリで
type ('a, 'b) result = Ok of 'a | Error of 'b type
として定義されている[4]。 - Rustでは、標準ライブラリで
enum Result<T, E> { Ok(T), Err(E) }
として定義されている[5][6]。 - Scalaでは、標準ライブラリで
Either
型が定義されているが[7]、従来の例外処理によるエラー処理も提供している。 - Swiftでは、標準ライブラリで
@frozen enum Result<Success, Failure> where Failure : Error
として定義されている[8]。 - C++では、標準ライブラリで
std::expected<T, E>
として定義されている[9]。
Rust
[編集]Result
型にはis_ok()
メソッドとis_err()
メソッドがある。
const CAT_FOUND: bool = true;
fn main() {
let result = pet_cat();
if result.is_ok() {
println!("Great, we could pet the cat!");
} else {
println!("Oh no, we couldn't pet the cat!");
}
}
fn pet_cat() -> Result<(), String> {
if CAT_FOUND {
Ok(())
} else {
Err(String::from("the cat is nowhere to be found"))
}
}
脚注
[編集]- ^ “Result · An Introduction to Elm”. guide.elm-lang.org. 2023年10月9日時点のオリジナルよりアーカイブ。2023年10月9日閲覧。
- ^ “Data.Either”. hackage.haskell.org (2023年9月22日). 2023年10月9日時点のオリジナルよりアーカイブ。2023年10月9日閲覧。
- ^ “Result - Kotlin Programming Language”. kotlinlang.org. 2023年10月9日時点のオリジナルよりアーカイブ。2023年10月9日閲覧。
- ^ “Error Handling · OCaml Tutorials”. ocaml.org. 2023年10月9日時点のオリジナルよりアーカイブ。2023年10月9日閲覧。
- ^ “std::result - Rust”. doc.rust-lang.org. 2023年10月9日時点のオリジナルよりアーカイブ。2023年10月9日閲覧。
- ^ “stdlib: Add result module · rust-lang/rust@c1092fb”. github.com (2011年10月29日). 2023年10月9日時点のオリジナルよりアーカイブ。2023年10月9日閲覧。
- ^ “Scala Standard Library 2.13.12 - scala.util.Either”. www.scala-lang.org. 2023年10月9日時点のオリジナルよりアーカイブ。2023年10月9日閲覧。
- ^ “Result | Apple Developer Documentation”. developer.apple.com. 2023年10月9日時点のオリジナルよりアーカイブ。2023年10月9日閲覧。
- ^ “std::expected - cppreference.com”. en.cppreference.com (2023年8月25日). 2023年10月9日時点のオリジナルよりアーカイブ。2023年10月9日閲覧。