This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed. Find sources: "Result type" – news · newspapers · books · scholar · JSTOR (January 2021) (Learn how and when to remove this message) |
In functional programming, a result type is a monadic type holding a returned value or an error code. They provide an elegant way of handling errors, without resorting to exception handling; when a function that may fail returns a result type, the programmer is forced to consider success or failure paths, before getting access to the expected result; this eliminates the possibility of an erroneous programmer assumption.
Examples
- In Elm, it is defined by the standard library as
type Result e v = Ok v | Err e
. - In Haskell, by convention the
Either
type is used for this purpose, which is defined by the standard library asdata Either a b = Left a | Right b
, wherea
is the error type andb
is the return type. - In Kotlin, it is defined by the standard library as
value class Result<out T>
. - In OCaml, it is defined by the standard library as
type ('a, 'b) result = Ok of 'a | Error of 'b type
. - In Rust, it is defined by the standard library as
enum Result<T, E> { Ok(T), Err(E) }
. - In Scala, the standard library also defines an
Either
type, however Scala also has more conventional exception handling. - In Swift, it is defined by the standard library as
@frozen enum Result<Success, Failure> where Failure : Error
. - In C++, it is defined by the standard library as
std::expected<T, E>
. - In Python, it is available from third party libraries such as returns and result.
Rust
The result object has the methods is_ok()
and 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")) } }
See also
References
- "Result · An Introduction to Elm". guide.elm-lang.org. Archived from the original on 9 October 2023. Retrieved 9 October 2023.
- "Data.Either". hackage.haskell.org. 22 September 2023. Archived from the original on 9 October 2023. Retrieved 9 October 2023.
- "Result - Kotlin Programming Language". kotlinlang.org. Archived from the original on 9 October 2023. Retrieved 9 October 2023.
- "Error Handling · OCaml Tutorials". ocaml.org. Archived from the original on 9 October 2023. Retrieved 9 October 2023.
- "std::result - Rust". doc.rust-lang.org. Archived from the original on 9 October 2023. Retrieved 9 October 2023.
- "stdlib: Add result module · rust-lang/rust@c1092fb". github.com. 29 October 2011. Archived from the original on 9 October 2023. Retrieved 9 October 2023.
- "Scala Standard Library 2.13.12 - scala.util.Either". www.scala-lang.org. Archived from the original on 9 October 2023. Retrieved 9 October 2023.
- "Result | Apple Developer Documentation". developer.apple.com. Archived from the original on 9 October 2023. Retrieved 9 October 2023.
- "std::expected - cppreference.com". en.cppreference.com. 25 August 2023. Archived from the original on 9 October 2023. Retrieved 9 October 2023.