La expresión 'match'
Parte de la sección Lógica y Flujo del Journey de Rust de Coddy. Lección 1 de 66.
La expresión match es una potente herramienta de Rust para la coincidencia de patrones que te permite comparar un valor con distintos patrones y ejecutar código según el patrón que coincida. Piensa en ella como una versión más avanzada de las instrucciones if, capaz de gestionar varias condiciones con elegancia.
Esta es la sintaxis básica de una expresión match:
match value {
pattern1 => code_to_run,
pattern2 => code_to_run,
_ => default_code,
}Cada línea dentro de match se llama «brazo». => separa el patrón del código que se ejecuta cuando ese patrón coincide. El guion bajo _ es un patrón comodín especial que coincide con cualquier cosa: es como un patrón que «atrapa todo» para cualquier valor que no coincida con los demás patrones.
Aquí tienes un ejemplo sencillo que comprueba un número:
let number = 2;
match number {
1 => println!("One"),
2 => println!("Two"),
_ => println!("Other"),
}En Rust, las expresiones match deben ser exhaustivas, lo que significa que deben manejar todos los valores posibles. Por eso el comodín _ es tan importante: garantiza que hayas cubierto todos los casos que no se hayan especificado explícitamente.
match es una expresión, así que también puede producir un valor. Cuando es la última expresión de una función, el valor del brazo que coincide es lo que devuelve la función:
fn day_name(day: i32) -> String {
match day {
1 => String::from("Monday"),
2 => String::from("Tuesday"),
_ => String::from("Another day"),
}
}Como esta función devuelve un String, cada brazo convierte su texto (un &str) en un String con String::from o .to_string().
Desafío
FácilEscribe una función describe_number que tome num y devuelva una descripción en forma de cadena basada en el valor del número.
Usa una expresión match para devolver diferentes descripciones para diferentes números.
Condiciones:
- Si
numes0, devuelve"zero" - Si
numes1, devuelve"one" - Si
numes2, devuelve"two" - Si
numes3, devuelve"three" - Para cualquier otro número, devuelve
"many"
Parámetros:
num(i32): El número que se describirá
Devuelve: Una descripción en forma de cadena del número (String)
Pruébalo tú mismo
fn describe_number(num: i32) -> String {
// Escribe el código aquí
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Flujo de control avanzado
La expresión 'match'Coincidencia de múltiples valoresCoincidencia de rangosLa expresión 'if let'Bucles como expresionesResumen - Analizador de comandos simple4Agrupando datos con Structs
¿Qué es un Struct?Visión general de los StructsAcceso a los campos de un StructStructs mutablesStructs como parámetros de funcionesStructs de tuplaResumen - Crear un Struct de Libro7Manejo de errores con 'Result'
¿Qué es un 'Result'?Uso de 'match' con 'Result'is_ok() e is_err()Atajos: unwrap y expectEl operador de signo de interrogación '?'Parsing de Strings a númerosResumen - Función de división segura10Closures y funciones anónimas
¿Qué es un Closure?Definir un Closure simpleClosures con parámetrosCapturar el entornoResumen - Closure sumador simple2Introducción a los vectores
¿Qué es un vector?Crear un vectorAñadir elementos con pushAcceder a los elementos de un vectorIterar sobre un vectorIteración mutableEliminar elementosResumen: Rastreador de puntuación básico5Pares clave-valor con Hash Maps
¿Qué es un Hash Map?Crear un Hash MapInsertar pares clave-valorAcceder a los valoresIterar sobre un Hash MapActualizar un valorEliminar un parRepaso: Contador de palabras8Proyecto: Inventario simple de artículos
Configuración del proyectoAgregar un artículoVerificar el stockVender un artículoUniendo todo3Lista de tareas en la línea de comandos
Configuración del proyectoAñadir una tareaVer todas las tareasEliminar una tareaCódigo finalPractica por tu cuenta: Compilador de Rust online