En

Enum em Elixir

98 exercícios

Sobre Enum

Enum é um módulo muito útil que fornece um conjunto de algoritmos para trabalhar com enumeráveis. Oferece:

E muito mais! Consulta a documentação do módulo Enum para veres a lista completa.

Enumerável

Em geral, um enumerável é qualquer dado sobre o qual se possa iterar, ou seja, uma coleção. Em Elixir, um enumerável é qualquer tipo de dados que implemente o protocolo Enumerable. São eles:

Não te preocupes se ainda não conheces todos.

Qualquer pessoa pode implementar o protocolo Enumerable para a sua própria estrutura de dados personalizada.

Reduce

Enum.reduce/2 permite-te reduzir todo o enumerável a um único valor. Para tal, usa-se uma variável especial chamada acumulador. O acumulador transporta o estado intermédio da redução entre iterações. Isto faz dele uma das funções mais poderosas para enumeráveis. Muitas outras funções especializadas podem ser substituídas pela reduce, que é mais geral. Por exemplo...

Encontrar o valor máximo:

Enum.max([4, 20, 31, 9, 2])
# => 31

Enum.reduce([4, 20, 31, 9, 2], nil, fn x, acc ->
  cond do
    acc == nil -> x
    x > acc -> x
    x <= acc -> acc
  end
end)

# => 31

E até fazer o mapeamento (mas obriga a inverter o resultado depois):

Enum.map([1, 2, 3, 4, 5], fn x -> x + 10 end)
# => [11, 12, 13, 14, 15]

Enum.reduce([1, 2, 3, 4, 5], [], fn x, acc -> [x + 10 | acc] end)
# => [15, 14, 13, 12, 11]

Mapeamento de mapas

  • Com Map.new/2:

    %{a: 1, b: 2}
    |> Map.new(fn {key, value} -> {key, value * 10} end)
    
  • Com Enum.into/3:

    %{a: 1, b: 2}
    |> Enum.into(%{}, fn {key, value} -> {key, value * 10} end)
    
  • Com Enum.map/2:

    %{a: 1, b: 2}
    |> Enum.map(fn {key, value} -> {key, value * 10} end)
    |> Enum.into(%{})
    
Editar via GitHub A ligação abre numa nova janela ou separador

Aprende Enum

A prática está bloqueada

Desbloqueia mais 10 exercícios para praticares Enum