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()))))
Aqui, nós estamos passando o valor other_function/0
para new_function/1
, e new_function/1
para foo/1
, foo/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()
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"]
Posso transformar uma string em caixa alta e fazer split simplesmente assim:
iex> "Daniel Soro" |> String.upcase() |> String.split()
["DANIEL", "SORO"]
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)
Bem bacana! parabéns pelos conteúdos e obrigado por compartilhar.
Vamos aprendendo! As coisas ainda estão em andamento! :)
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...