Enum
Last updated
Was this helpful?
Last updated
Was this helpful?
Algumas funções nativas no Elixir utilizam recursão estão disponÃveis para utilizarmos com uma API limpa. O módulo é 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.
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 )
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.
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
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.
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 )