Utilizando Filtros (Guards) em Rust

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste laboratório, aprendemos a utilizar match guards em Rust para filtrar ramos com base em condições. O match guard é adicionado após o padrão e é representado pela palavra-chave if, seguida de uma condição. A condição do guard permite refinar ainda mais a correspondência de padrões e realizar verificações adicionais antes de executar o ramo correspondente da expressão match. No entanto, é importante notar que o compilador não considera as condições do guard ao verificar a cobertura de padrões, por isso é necessário garantir que todos os padrões ainda estejam cobertos pela expressão match.

Nota: Se o laboratório não especificar um nome de ficheiro, pode utilizar qualquer nome de ficheiro que desejar. Por exemplo, pode utilizar main.rs, compilá-lo e executá-lo com rustc main.rs && ./main.

Filtros (Guards)

Um filtro (match guard) pode ser adicionado para filtrar o ramo.

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

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

    match temperature {
        Temperature::Celsius(t) if t > 30 => println!("{}C está acima de 30 graus Celsius", t),
        // A parte `if condição` ^ é um filtro
        Temperature::Celsius(t) => println!("{}C está abaixo de 30 graus Celsius", t),

        Temperature::Fahrenheit(t) if t > 86 => println!("{}F está acima de 86 graus Fahrenheit", t),
        Temperature::Fahrenheit(t) => println!("{}F está abaixo de 86 graus Fahrenheit", t),
    }
}

Note que o compilador não levará em conta as condições de filtro ao verificar se todos os padrões estão cobertos pela expressão match.

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

    match number {
        i if i == 0 => println!("Zero"),
        i if i > 0 => println!("Maior que zero"),
        // _ => unreachable!("Deveria nunca acontecer."),
        // TODO ^ descomente para corrigir a compilação
    }
}

Resumo

Parabéns! Concluiu o laboratório de Filtros. Pode praticar mais laboratórios no LabEx para melhorar as suas competências.