Manejo de errores con retornos tempranos en 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, exploramos el concepto de retornos tempranos como una forma de manejar errores en Rust. El código de ejemplo demuestra cómo podemos usar declaraciones match y retornos tempranos para manejar errores de manera elegante, lo que hace que el código sea más fácil de leer y escribir. También discutimos las limitaciones del manejo explícito de errores e introducimos el uso del operador ? para casos en los que necesitamos desempaquetar valores sin correr el riesgo de causar un panic.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99242{{"Manejo de errores con retornos tempranos en Rust"}} rust/integer_types -.-> lab-99242{{"Manejo de errores con retornos tempranos en Rust"}} rust/string_type -.-> lab-99242{{"Manejo de errores con retornos tempranos en Rust"}} rust/function_syntax -.-> lab-99242{{"Manejo de errores con retornos tempranos en Rust"}} rust/expressions_statements -.-> lab-99242{{"Manejo de errores con retornos tempranos en Rust"}} rust/operator_overloading -.-> lab-99242{{"Manejo de errores con retornos tempranos en Rust"}} end

Retornos tempranos

En el ejemplo anterior, manejamos explícitamente los errores usando combinadores. Otra forma de abordar este análisis de casos es usar una combinación de declaraciones match y retornos tempranos.

Es decir, podemos simplemente detener la ejecución de la función y devolver el error si ocurre uno. Para algunos, esta forma de código puede ser más fácil de leer y escribir. Considere esta versión del ejemplo anterior, reescrita usando retornos tempranos:

use std::num::ParseIntError;

fn multiply(first_number_str: &str, second_number_str: &str) -> Result<i32, ParseIntError> {
    let first_number = match first_number_str.parse::<i32>() {
        Ok(first_number)  => first_number,
        Err(e) => return Err(e),
    };

    let second_number = match second_number_str.parse::<i32>() {
        Ok(second_number)  => second_number,
        Err(e) => return Err(e),
    };

    Ok(first_number * second_number)
}

fn print(result: Result<i32, ParseIntError>) {
    match result {
        Ok(n)  => println!("n es {}", n),
        Err(e) => println!("Error: {}", e),
    }
}

fn main() {
    print(multiply("10", "2"));
    print(multiply("t", "2"));
}

Hasta este punto, hemos aprendido a manejar explícitamente los errores usando combinadores y retornos tempranos. Si bien generalmente queremos evitar causar un panic, manejar explícitamente todos nuestros errores es engorroso.

En la siguiente sección, introduciremos el ? para los casos en los que simplemente necesitamos desempaquetar sin correr el riesgo de causar un panic.

Resumen

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