Correspondendo Valores

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 aĂ­"),
        '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 |.