freeCodeCamp/guide/portuguese/elixir/pattern-matching/index.md

39 lines
2.6 KiB
Markdown
Raw Normal View History

---
title: Pattern Matching
localeTitle: Correspondência de Padrões
---
## Correspondência de Padrões
A correspondência de padrões é uma técnica que o Elixir herda da forma Erlang. É uma técnica muito poderosa que nos permite extrair subestruturas mais simples de estruturas de dados complicadas, como listas, tuplas, mapas, etc.
Um jogo tem duas partes principais, uma esquerda e uma direita. O lado direito é uma estrutura de dados de qualquer tipo. O lado esquerdo tenta combinar a estrutura de dados no lado direito e vincular quaisquer variáveis ​​à esquerda à respectiva subestrutura à direita. Se uma correspondência não for encontrada, o operador gerará um erro.
A correspondência mais simples é uma variável solitária à esquerda e qualquer estrutura de dados à direita. Essa variável corresponderá a qualquer coisa. Por exemplo:
`x = 12`
`x = "Hello"`
`IO.puts(x)`
Você pode colocar variáveis dentro de uma estrutura para poder capturar uma subestrutura. Por exemplo:
`[var_1, _unused_var, var_2] = [{"First variable"}, 25, "Second variable" ]`
`IO.puts(var_1)`
`IO.puts(var_2)`
Isto irá armazenar os valores, `{"First variable"}` no var _1 e `"Second variable"` no var_ 2. Há também uma variável especial (ou variáveis prefixadas com '\_') que funciona exatamente como outras variáveis, mas diz elixir, "Certifique-se de que algo está aqui, mas não me importo com o que é". No exemplo anterior, \_unused\_var era uma dessas variáveis.
Podemos combinar padrões mais complicados usando essa técnica. Por exemplo, se você quiser desembrulhar e obter um número em uma tupla que esteja dentro de uma lista que esteja em uma lista, use o seguinte comando:
`[_, [_, {a}]] = ["Random string", [:an_atom, {24}]]`
`IO.puts(a)`
O programa acima gera o seguinte resultado -
`24`
Isto irá ligar um para 24. Outros valores são ignorados como estamos usando '\_'.
Na correspondência de padrões, se usarmos uma variável à direita, seu valor será usado. Se você quiser usar o valor de uma variável à esquerda, você precisará usar o operador pin.
Por exemplo, se você tem uma variável "a" com o valor 25 e você quer combiná-la com outra variável "b" com valor 25, então você precisa digitar -
`a = 25`
`b = 25`
`^a = b`
A última linha corresponde ao valor atual de um, em vez de atribuí-lo, ao valor de b. Se tivermos um conjunto não correspondente do lado esquerdo e direito, o operador de correspondência gera um erro. Por exemplo, se tentarmos combinar uma tupla com uma lista ou uma lista de tamanho 2 com uma lista de tamanho 3, um erro será exibido.