Uso de Match Case en Rust para Control de Flujo

Clase 12 de 21Curso de Backend con Rust: Bases de Datos, Controladores y Templates

Resumen

Cuando tienes que ejecutar una pieza de código u otra dependiendo el valor de una variable, simplemente utilizas la sentencia if/else. Pero si tienes muchas posibilidades y condiciones diferentes, usar if se vuelve algo sucio y poco legible el código.

Sentencia Match en Rust

Muchos lenguajes de programación tienen la sentencia switch/case para actuar de una manera u otra a partir del valor de una variable.

Rust innova en este aspecto y ofrece la sentencia match que, además de responder de múltiples maneras dependiendo el valor de una variable, permite crear una estructura muy similar a un switch, pero más poderoso.

fn main() {
    let edad = 18;

    match edad {
        17 => { /* ... */ },        // Cuando el valor es 17
        18 => { /* ... */ }         // Cuando el valor es 18
        _ => { /* ... */ }          // Valor por defecto
    }
}

En este ejemplo estamos evaluando la variable edad y, dependiendo el valor de la misma, se ejecuta el código dentro de los {}. Utilizamos también el _ como valor por defecto si no coincide ningún valor del match.

También puedes establecer condiciones en cada caso:

fn main() {
    let edad = 18;

    match edad {
        0..=16 => { /* ... */ },          // de 0 a 16 inclusive
        17 => { /* ... */ },
        18 => { /* ... */ }
        19 | 20 | 21 => { /* ... */ },    // (or) 19, 20 o 21
        _ => { /* ... */ }
    }

}

Lo poderoso de esta sentencia es que puedes elegir entre ejecutar la pieza de código dentro de los {} o incluso devolver un valor y almacenarlo dentro de una variable:

fn main() {
    let edad = 18;

    let resultado = match edad {
        0..=16 => "Entre 0 y 16",
        17 => "El valor es 17",
        18 => "El valor es 18",
        19 | 20 | 21 => "El valor es 19, 20 o 21",
        _ => "Valor por defecto"
    };

    println!("{}", resultado);
}

Observa también que no necesitas usar la palabra return aunque no te olvides el ; al cerrar el match.

match es una gran innovación de Rust. Con más posibilidades que un switch/case que tal vez ya conozcas. Explora esta característica, ya que te será muy útil en el futuro.


Contribución creada por: Kevin Fiorentino.