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

2.6 KiB
Raw Blame History

title localeTitle
Pattern Matching 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.