Elixir :: Aninhando funções com operador pipe ( |> )

danielvlcunha

Daniel Cunha

Posted on January 26, 2022

Elixir :: Aninhando funções com operador pipe ( |> )

Algumas vezes nosso código pode ficar muito confuso, principalmente quando precisamos encadear várias funções. Imagine ler um código com funções aninhadas como o exemplo abaixo:

my_function(get_result_from(foo(new_function(other_function()))))
Enter fullscreen mode Exit fullscreen mode

Aqui, nós estamos passando o valor other_function/0 para new_function/1, e new_function/1 para foo/1foo/1 para get_result_from/1, e finalmente o resultado de get_result_from/1 para my_functoin/1.

Elixir possui um modo pragmático que melhora o entendimento do código quando temos chamadas como esta, com a utilização do operador pipe. O operador pipe |>recebe o resultado de uma expressão e passa ele adiante. Assim, poderiamos reescrever o código acima da seguinte maneira:

other_function() |> new_function() |> foo() |> get_result_from() |> my_function()
Enter fullscreen mode Exit fullscreen mode

Se você possui alguma familiaridade com shell script, o pipe do Elixir é exatamente como do shell, ou seja o valor retornado da esqueda é passado para a função da direita.

Alguns exemplos de utilização do pipe

Posso fazer split de uma string simplesmente assim:

iex> "Daniel Soro" |> String.split()
["Daniel", "Soro"]
Enter fullscreen mode Exit fullscreen mode

Posso transformar uma string em caixa alta e fazer split simplesmente assim:

iex> "Daniel Soro" |> String.upcase() |> String.split()
["DANIEL", "SORO"]
Enter fullscreen mode Exit fullscreen mode

Com o pipe, podemos produzir código mais legívies e elegante, um operador muito legal em Elixir para deixar nosso código sinteticamente mais elegante e fácil de entender!

💖 💪 🙅 🚩
danielvlcunha
Daniel Cunha

Posted on January 26, 2022

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related