Тип результата
Эта статья нуждается в дополнительных цитатах для проверки . ( январь 2021 г. ) |
В функциональном программировании тип результата — это монадический тип, содержащий возвращаемое значение или код ошибки. Они предоставляют элегантный способ обработки ошибок, не прибегая к обработке исключений; когда функция, которая может дать сбой, возвращает тип результата, программист вынужден учитывать пути успеха или неудачи, прежде чем получить доступ к ожидаемому результату; это исключает возможность ошибочного предположения программиста.
Примеры
[ редактировать ]- В Elm он определяется стандартной библиотекой как
type Result e v = Ok v | Err e
. [1] - В Haskell по соглашению
Either
для этой цели используется тип, который определяется стандартной библиотекой какdata Either a b = Left a | Right b
, гдеa
тип ошибки иb
это возвращаемый тип. [2] - В Котлине он определяется стандартной библиотекой как
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] однако Scala также имеет более традиционную обработку исключений . - В Swift он определяется стандартной библиотекой как
@frozen enum Result<Success, Failure> where Failure : Error
. [8] - В C++ он определяется стандартной библиотекой как
std::expected<T, E>
. [9] - В Python он доступен из сторонних библиотек, таких как return и 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"))
}
}
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Результат · Введение в Elm» . guide.elm-lang.org . Архивировано из оригинала 9 октября 2023 года . Проверено 9 октября 2023 г.
- ^ «Данные.Либо» . hackage.haskell.org . 22 сентября 2023 года. Архивировано из оригинала 9 октября 2023 года . Проверено 9 октября 2023 г.
- ^ «Результат — язык программирования Kotlin» . kotlinlang.org . Архивировано из оригинала 9 октября 2023 года . Проверено 9 октября 2023 г.
- ^ «Обработка ошибок · Учебные пособия по OCaml» . ocaml.org . Архивировано из оригинала 9 октября 2023 года . Проверено 9 октября 2023 г.
- ^ "std::result - Rust" . doc.rust-lang.org . Архивировано из оригинала 9 октября 2023 года . Проверено 9 октября 2023 г.
- ^ «stdlib: Добавить модуль результатов · ржавчина-lang/rust@c1092fb» . github.com . 29 октября 2011 г. Архивировано из оригинала 9 октября 2023 г. . Проверено 9 октября 2023 г.
- ^ «Стандартная библиотека Scala 2.13.12 — scala.util.Either» . www.scala-lang.org . Архивировано из оригинала 9 октября 2023 года . Проверено 9 октября 2023 г.
- ^ «Результат | Документация разработчика Apple» . разработчик.apple.com . Архивировано из оригинала 9 октября 2023 года . Проверено 9 октября 2023 г.
- ^ «std::expected — cppreference.com» . ru.cppreference.com . 25 августа 2023 года. Архивировано из оригинала 9 октября 2023 года . Проверено 9 октября 2023 г.