Contenido del curso

Gestión de modelos en el backend con el ORM Diesel

Uso de Match Case en Rust para Control de Flujo

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.