Correspondência de Padrões

A palavra-chave match permite que você corresponda um valor a um ou mais padrões (patterns). As comparações são feitas de cima para baixo e a primeira correspondência encontrada é selecionada.

Os padrões podem ser valores simples, similarmente a switch em C e C++:

#[rustfmt::skip]
fn main() {
    let input = 'x';
    match input {
        'q'                       => println!("Encerrando"),
        'a' | 's' | 'w' | 'd'     => println!("Movendo por ai"),
        '0'..='9'                 => println!("Entrada de número"),
        key if key.is_lowercase() => println!("Minúsculas: {key}"),
        _                         => println!("Alguma outra coisa"),
    }
}

O padrão _ é um padrão curinga que corresponde a qualquer valor. As expressões devem ser irrefutáveis, o que significa que cobre todas as possibilidades, então _ é frequentemente usado como o último caso de captura.

Correspondência pode ser usada como uma expressão. Assim como if, cada braço de correspondência deve ter o mesmo tipo. O tipo é a última expressão do bloco, se houver. No exemplo acima, o tipo é ().

Uma variável no padrão (key neste exemplo) criará uma ligação que pode ser usada dentro do braço de correspondência.

Uma guarda de correspondência faz com que o braço corresponda somente se a condição for verdadeira.

This slide should take about 10 minutes.

Pontos Chave:

  • Você pode apontar como alguns caracteres específicos podem ser usados em um padrão

    • | como um or
    • .. pode expandir o quanto for necessário
    • 1..=5 representa um intervalo inclusivo
    • _ é um curinga
  • Guardas de correspondência, como um recurso de sintaxe separado, são importantes e necessárias quando se quer expressar ideias mais complexas do que somente o padrão permitiria.

  • Eles não são iguais à expressão if separada dentro do bloco de correspondência. Uma expressão if dentro do bloco de ramificação (depois de =>) acontece depois que a correspondência é selecionada. A falha na condição if dentro desse bloco não resultará em outras verificações de correspondência da expressão match original serem consideradas.

  • A condição definida na guarda se aplica a todas as expressões em um padrão com um |.