Equivalente de la instrucción Try-Catch en Rust

Muhammad Adil 21 junio 2022
Equivalente de la instrucción Try-Catch en Rust

Rust es un lenguaje de programación que proporciona una forma más segura y confiable de desarrollar software. Está diseñado para evitar errores comunes que conducen a vulnerabilidades de seguridad en otros idiomas.

El lenguaje Rust no admite el manejo de excepciones, lo que significa que no tiene una declaración try-catch en Rust.

La falta de manejo de excepciones en Rust elimina la posibilidad de errores de tiempo de ejecución debido a excepciones lanzadas desde una función. Esto se debe a que el programa se detendrá en el punto donde ocurra un error en lugar de continuar y posiblemente causar otros problemas en el código base.

Este artículo discutirá el equivalente de Rust a una declaración try-catch.

Equivalente de la instrucción try-catch en Rust

Hay muchos equivalentes disponibles en Rust para declaraciones try-catch. Pero, aquí en este artículo, discutiremos solo algunos equivalentes más cercanos.

Utilizar el ? Operador en Rust

En Rust, podemos usar el ? operador para devolver o no devolver los valores.

Los ? operator es una de las características esenciales de Rust, y se puede utilizar de muchas maneras diferentes. Puede verificar si un valor está presente, si se ha asignado un valor a una variable o si una expresión se evalúa como verdadera o falsa.

Los ? El operador también se puede usar como una alternativa para la declaración try-catch de Rust. Los ? operador toma un cierre como su parámetro.

Luego, se puede llamar al cierre sin preocuparse por lo que sucederá si ocurre un error durante la ejecución.

Los ? El operador detectará el error y devolverá el valor del cierre si no hubo error, o devolverá un tipo de error con una descripción de lo que salió mal si hubo uno.

Ejemplo:

fn main() {
    let hello_tasks = || -> Result<(), HelloError> {
        hello_task_1()?;
        hello_task_2()?;
        hello_task_3()?;
        Ok(())
    };
    if let Err(_err) = hello_tasks() {
        println!("There's an error in your code, please correct it");
    }
}
enum HelloError {
    HelloTask1Error,
    HelloTask2Error,
    HelloTask3Error,
}
fn hello_task_1() -> Result<(), HelloError> {
    println!("Task No 1");
    Ok(())
}
fn hello_task_2() -> Result<(), HelloError> {
    println!("Task No 2");
    Err(HelloError::HelloTask2Error)
}
fn hello_task_3() -> Result<(), HelloError> {
    println!("task3");
    Ok(())
}

Producción :

Task No 1
Task No 2
There's an error in your code, please correct it

Haga clic aquí para ver la demostración en vivo del código mencionado anteriormente.

Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook