Usando Filtros de Coincidencia (`Match Guards`) 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, aprendemos a usar los filtros de coincidencia (match guards) en Rust para filtrar los brazos (arms) basados en condiciones. El filtro de coincidencia se agrega después del patrón y está representado por la palabra clave if seguida de una condición. La condición del filtro nos permite refinar aún más la coincidencia de patrones y realizar comprobaciones adicionales antes de ejecutar el brazo correspondiente de la expresión match. Sin embargo, es importante tener en cuenta que el compilador no considera las condiciones de filtro al comprobar la cobertura de patrones, por lo que es necesario asegurarse de que todos los patrones sigan estando cubiertos por la expresión match.

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.

Filtros

Se puede agregar un filtro (guard) a la coincidencia (match) para filtrar el brazo (arm).

#[allow(dead_code)]
enum Temperature {
    Celsius(i32),
    Fahrenheit(i32),
}

fn main() {
    let temperature = Temperature::Celsius(35);
    // ^ TODO probar diferentes valores para `temperature`

    match temperature {
        Temperature::Celsius(t) if t > 30 => println!("{}C está por encima de 30 grados Celsius", t),
        // La parte `if condition` ^ es un filtro
        Temperature::Celsius(t) => println!("{}C está por debajo de 30 grados Celsius", t),

        Temperature::Fahrenheit(t) if t > 86 => println!("{}F está por encima de 86 grados Fahrenheit", t),
        Temperature::Fahrenheit(t) => println!("{}F está por debajo de 86 grados Fahrenheit", t),
    }
}

Tenga en cuenta que el compilador no tomará en cuenta las condiciones de filtro al comprobar si todos los patrones están cubiertos por la expresión match.

fn main() {
    let number: u8 = 4;

    match number {
        i if i == 0 => println!("Cero"),
        i if i > 0 => println!("Mayor que cero"),
        // _ => unreachable!("Nunca debería suceder."),
        // TODO ^ descomentar para solucionar la compilación
    }
}

Resumen

¡Felicitaciones! Has completado el laboratorio de Filtros (Guards). Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.