DEV Community

Cover image for Precisamos utilizar While-Loops no Elixir?
Pedro Henrique
Pedro Henrique

Posted on • Updated on • Originally published at dev.to

Precisamos utilizar While-Loops no Elixir?

Precisamos utilizar While-Loops no Elixir?

Se você já trabalhou com linguagens imperativas e decidiu mergulhar de cabeça nesta linguagem maravilhosa que é Elixir, você provavelmente já deve ter se perguntado como funcionam loops. Mas, será que realmente precisamos deles?

Elixir é uma linguagem funcional, o estado é imutável. Ela não possui estruturas básicas para loop como for ou while de linguagens imperativas convencionais. Veremos algumas alternativas muito interessantes para trabalhar.

Utilizando comprehensions

Utilizando comprehensions podemos criar códigos mais concisos para criar iterações.

iex> for n <- 1..10, do: n * 2
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Enter fullscreen mode Exit fullscreen mode

Podemos observar a primeira parte dessa estrutura, o que chamamos de generators: n <- 1..10. Em seguida nós multiplicamos a variável n por 2, e temos este resultado: [2, 4, 6...].

Também conseguimos aplicar essa estrutura de for com listas aplicando generators.

iex> lista = [1, 2, 3, 4, 5]
iex> for n <- lista, do: rem(n)
[false, true, false, true, false]
Enter fullscreen mode Exit fullscreen mode

Note que aplicamos a lista que definimos no generator para iterá-la, e em seguida verificamos se cada item dessa lista é par.

Iterando listas

Com a função each/2 conseguimos iterar uma coleção de valores sem criar uma lista.

iex> lista = [1, 2, 3, 4, 5]
iex> Enum.each(lista, fn(n) -> IO.puts rem(n, 2) == 0 end)
false
true
false
true
false
:ok
Enter fullscreen mode Exit fullscreen mode

Seguindo o mesmo exemplo utilizado no último tópico, verificamos se cada item da lista é par. Porém, o retorno dessa função é apenas um átomo :ok.

Já com a função map/2 conseguimos produzir uma nova lista.

iex> lista = [1, 2, 3, 4, 5]
iex> Enum.map(lista, fn(n) -> rem(n, 2) == 0 end)
[false, true, false, true, false]
Enter fullscreen mode Exit fullscreen mode

Aplicando a mesma lógica, nós temos um resultado semelhante ao primeiro de exemplo utilizando comprehension.

Utilizando macros

Com o uso da metaprogramação do Elixir nós conseguimos estender e criar algo semelhante ao While-Loop de linguagens imperativas. Porém, é totalmente desnecessário.

Conclusão

A resposta para o tema central é: não. Temos maneiras mais inteligentes e eficazes para trabalhar com listas e mapas.

Latest comments (0)