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(value) = arg {
        println!("Nome do programa: {value}");
    } 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!("{:?}", second_word_to_upper("foo bar"));
    }
     
    fn second_word_to_upper(s: &str) -> Option<String> {
        let mut it = s.split(' ');
        let (Some(_), Some(item)) = (it.next(), it.next()) else {
            return None;
        };
        Some(item.to_uppercase())
    }