Precisamos utilizar While-Loops no Elixir?
Pedro Henrique
Posted on March 30, 2022
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]
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]
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
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]
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.
Posted on March 30, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.