Manejo de fallos con el enum Option de Rust

RustRustBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás sobre el enum Option<T> en Rust, que proporciona dos variantes (None y Some(value)) para manejar el fracaso o la ausencia de valor en un programa.

Nota: Si el laboratorio no especifica un nombre de archivo, puedes usar cualquier nombre de archivo que desees. Por ejemplo, puedes usar main.rs, compilar y ejecutarlo con rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/DataTypesGroup -.-> rust/type_casting("Type Conversion and Casting") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99256{{"Manejo de fallos con el enum Option de Rust"}} rust/integer_types -.-> lab-99256{{"Manejo de fallos con el enum Option de Rust"}} rust/type_casting -.-> lab-99256{{"Manejo de fallos con el enum Option de Rust"}} rust/function_syntax -.-> lab-99256{{"Manejo de fallos con el enum Option de Rust"}} rust/expressions_statements -.-> lab-99256{{"Manejo de fallos con el enum Option de Rust"}} rust/lifetime_specifiers -.-> lab-99256{{"Manejo de fallos con el enum Option de Rust"}} rust/method_syntax -.-> lab-99256{{"Manejo de fallos con el enum Option de Rust"}} rust/operator_overloading -.-> lab-99256{{"Manejo de fallos con el enum Option de Rust"}} end

Option

A veces es deseable capturar el fracaso de algunas partes de un programa en lugar de llamar a panic!; esto se puede lograr utilizando el enum Option.

El enum Option<T> tiene dos variantes:

  • None, para indicar el fracaso o la ausencia de valor, y
  • Some(value), una struct tupla que envuelve un value con tipo T.
// Una división entera que no `panic!`
fn checked_division(dividendo: i32, divisor: i32) -> Option<i32> {
    if divisor == 0 {
        // El fracaso se representa como la variante `None`
        None
    } else {
        // El resultado se envuelve en una variante `Some`
        Some(dividendo / divisor)
    }
}

// Esta función maneja una división que puede no tener éxito
fn try_division(dividendo: i32, divisor: i32) {
    // Los valores de `Option` se pueden hacer match de patrones, al igual que otros enums
    match checked_division(dividendo, divisor) {
        None => println!("{} / {} fracasó!", dividendo, divisor),
        Some(cociente) => {
            println!("{} / {} = {}", dividendo, divisor, cociente)
        },
    }
}

fn main() {
    try_division(4, 2);
    try_division(1, 0);

    // Asignar `None` a una variable necesita ser anotada con tipo
    let none: Option<i32> = None;
    let _equivalente_none = None::<i32>;

    let optional_float = Some(0f32);

    // Desempaquetar una variante `Some` extraerá el valor envuelto.
    println!("{:?} se desempaqueta en {:?}", optional_float, optional_float.unwrap());

    // Desempaquetar una variante `None` hará `panic!`
    println!("{:?} se desempaqueta en {:?}", none, none.unwrap());
}

Resumen

¡Felicidades! Has completado el laboratorio de Option. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.