DEV Community

Daniel Cunha
Daniel Cunha

Posted on

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!

Top comments (3)

Collapse
 
wlsf profile image
Willian Frantz

Bem bacana! parabéns pelos conteúdos e obrigado por compartilhar.

Collapse
 
danielvlcunha profile image
Daniel Cunha

Vamos aprendendo! As coisas ainda estão em andamento! :)

Collapse
 
zacky1972 profile image
Susumu Yamazaki

Hi,

If you are interested in the origin of the pipeline, see the following article:
Se você estiver interessado na origem do pipeline, consulte o artigo a seguir (em inglês):

dev.to/zacky1972/the-origin-of-the...