ExpressÔes if let

A expressĂŁo if let lhe permite que vocĂȘ execute um cĂłdigo diferente, dependendo se um valor corresponde a um padrĂŁo:

fn main() {
    let arg = std::env::args().next();
    if let Some(valor) = arg {
        println!("Nome do programa: {valor}");
    } else {
        println!("Falta o nome?");
    }
}

Consulte correspondĂȘncia de padrĂ”es (pattern matching) para obter mais detalhes sobre padrĂ”es em Rust.

  • Ao contrĂĄrio de match, if let nĂŁo precisa cobrir todas as ramificaçÔes. Isso pode tornĂĄ-lo mais conciso do que match.

  • Um uso comum Ă© lidar com valores Some ao trabalhar com Option.

  • Ao contrĂĄrio de match, if let nĂŁo suporta clĂĄusulas de guarda para correspondĂȘncia de padrĂ”es.

  • Desde 1.65, uma construção let-else semelhante permite fazer uma atribuição de desestruturação, ou se falhar, ter um bloco de ramificação sem retorno (panic/return/break/continue):

    fn main() {
        println!("{:?}", segunda_palavra_para_maiusculas("foo bar"));
    }
     
    fn segunda_palavra_para_maiusculas(s: &str) -> Option<String> {
        let mut it = s.split(' ');
        let (Some(_), Some(item)) = (it.next(), it.next()) else {
            return None;
        };
        Some(item.to_uppercase())
    }