Padrões e Desestruturação
Quando se trabalha com tuplas e outros valores estruturados, é comum querer extrair os valores internos em variáveis locais. Isso pode ser feito manualmente acessando diretamente os valores internos:
fn print_tuple(tuple: (i32, i32)) { let left = tuple.0; let right = tuple.1; println!("esquerda: {left}, direita: {right}"); }
No entanto, Rust também suporta o uso de correspondência de padrões (pattern matching) para desestruturar um valor maior em suas partes constituintes:
fn print_tuple(tuple: (i32, i32)) { let (left, right) = tuple; println!("esquerda: {left}, direita: {right}"); }
This slide should take about 5 minutes.
- Os padrões usados aqui são "irrefutáveis", o que significa que o compilador pode verificar estaticamente que o valor à direita de
=
tem a mesma estrutura que o padrão. - Um nome de variável é um padrão irrefutável que sempre corresponde a qualquer valor, por isso podemos também usar
let
para declarar uma única variável. - Rust também suporta o uso de padrões em condicionais, permitindo a comparação de igualdade e desestruturação ao mesmo tempo. Esta forma de correspondência de padrões será discutida em mais detalhes posteriormente.
- Edite os exemplos acima para mostrar o erro do compilador quando o padrão não corresponde ao valor sendo correspondido.