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 comrustc 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.