Top Qs
Timeline
Chat
Perspective

Result type

Concept in functional programming From Wikipedia, the free encyclopedia

Remove ads

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.

Remove ads

Examples

Summarize
Perspective
  • In Elm, it is defined by the standard library as type Result e v = Ok v | Err e.[1]
  • In Haskell, by convention the Either type is used for this purpose, which is defined by the standard library as data Either a b = Left a | Right b, where a is the error type and b is the return type.[2]
  • In Kotlin, it is defined by the standard library as value class Result<out T>.[3]
  • In OCaml, it is defined by the standard library as type ('a, 'b) result = Ok of 'a | Error of 'b type.[4]
  • In Rust, it is defined by the standard library as enum Result<T, E> { Ok(T), Err(E) }.[5][6]
  • In Scala, the standard library also defines an Either type,[7] 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.[8]
  • In C++, it is defined by the standard library as std::expected<T, E>.[9]
  • In Python, it is available from third party libraries such as returns and result.
  • In V, the result type is implemented natively using !T as the return type of a function. For example fn my_function() !string { ... }. Error Handling in V.

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"))
    }
}

Vlang

The Error type is an interface for iError.

const cat_found = true

fn main() {
    cat_name := get_pet_cat_name() or { 
        println("Oh no, we couldn't pet the cat!")
        exit(1)
    }

    println('Great, we could pet the cat ' + cat_name)
}

fn get_pet_cat_name() !string {
    if cat_found { return 'Max' } 
    else { return error('the cat is nowhere to be found') }
}

See also

References

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads