Enum
Algumas funções nativas no Elixir utilizam recursão estão disponÃveis para utilizarmos com uma API limpa. O módulo Enum
é um deles. Para entender melhor o que é um Enum, leia o conceito de Enumeráveis.
Vamos a um exemplo real com base em algumas funções que Enum tem.
Enum.each/2
Supomos que precisamos percorrer todos os itens de uma lista mandando um email para cada email da lista.
Utilizaremos para esse looping onde só precisamos percorrer a lista a função Enum.each/2
(caso não esteja familiado com o conceito de aridade, recomendo o capÃtulo sobre Aridade)
Para rodar o Enum.each/2
precisamos um primeiro argumento onde será nossa lista e o segundo argumento uma função anonima com apenas um argumento (que será cada item da nossa lista, passada no primeiro argumento).
Vamos criar um teste para isso
Não possuÃmos o módulo Email nem a função send. Vamos cria-los.
Fizemos uma função inline, somente para exemplificar o looping. Basta rodar os testes e tudo estará bem.
Enum.map/2
Agora supomos que precisamos alterar a lista para, ao invez de enviar o email, gere links para clicarmos e sermos redirecionados a um cliente de email. Uma vez que precisamos alterar os dados, utilizaremos Enum.map/2 que tem como ideia mapear novamente os dados dentro dele.
Vamos ao teste
Perceba que criamos uma nova variável e assinamos o retorno da função map/2 lá. Como Elixir é uma linguagem funcional, nada se muta, precisamos sempre re-assinar um valor para que a variável tenha um outro valor. (Veja mais sobre imutabilidade no capÃtulo de Imutabilidade)
A função map serve para alterar o valor que vem de uma lista, sem precisarmos abrir um por um, ja possuindo uma estrutura de repetição onde você passa a lista e o que quer que faça com cada elemento da lista, retornando para seu próprio valor.
Depois disso, apenas comparamos a um valor experado que definimos. Basta rodar o testes e verá a mágica acontecer.
Last updated