Pipes
A tradução direta de pipes é canos. Você pode pensar sobreCanos como os canos de sua casa. Eles funcionam para passar água de um lugar para outro. No meio dessa passagem podemos por algumas coisas como, válvulas e filtros, até chegar em nossa torneira pronta para uso.
A água seria nossos dados. As válvulas e filtros os redutores e a torneira seria nosso transformador. A ideia aqui é passar dados a fim de realizar operações sequenciais para termos uma resposta final que precisamos. dados -> função 1 -> função 2 -> função N -> dados transformados pronto para uso.
Normalmente utilizamos funções dessa forma
funcao(argumento1)Com pipe, é um pouco diferente.
argumento_1
|> funcao()A troca da sequência, onde colocamos o parâmetro antes da função nos possibilita encadear várias funções.
arumento_1
|> funcao_1()
|> funcao_2()
|> funcao_3()No exemplo acima, a funcao_1 recebe o argumento_1, a funcao_2 recebe a resposta da funcao_1 e a funcao_3 recebe a resposta da funcao_2.
Aridade em funções
Se a aridade de uma função for maior do que 1, Utilize parênteses. Elixir não se importa com isso, mas, é importante para outros programadores, pois podem interpretar mal o seu código.
foo # Isso é uma função ou variável?
bar() # Aaah, isso é uma função.
Podemos utilizar pipes
Com funções nativas;
Em um linha só;
Com condicionais (mesmo não sendo tão legal de ler)
Podemos utilizar basicamente qualquer função no pipe, seguindo a regra do primeiro parâmetro vir antes.
Exemplo
Vamos fazer algo então. Precisamos fazer uma sequencia de operações para atender a uma regra.
Dado um valor vamos
Somar o valor de entrada por 10;
Multiplicar o valor por 2;
Diminuir por 5
Vamos começar sem a utilização de pipes. Para isso adicionarei um parâmetro extra em nossa função, onde poderemos colocar e cair na função que não utiliza pipes ou apenas passando um valor e cairá na função com pipe. Vamos sem pipes primeiro.
Não temos criado o modulo, vamos cria-lo.
Agora podemos seguir.
Precisamos resolver esse modulo usando funções e elas ficam bem claras quais são. Basta pegar os passos que devem ser feitos somar, diminuir e multiplicar.
Podemos resolver isso, assim:
Criamos as funções referente a regra e juntamos tudo na função publica crazy_rule. Vamos rodar isso.
Tudo funcionando bem e nosso teste passando.
Vamos agora criar utilizando pipes.
Adicionando a função utilizando pipes:
Execute os testes novamente
A utilização de pipes deixa o código mais elegante a fácil de entender. A leitura se torna mais fluÃda e colocar uma nova função no meio dele fica bem simples, enquanto sem pipes se torna repetitiva e verbosa.
Pipes
As funções no pipe deve seguir uma ordem lógica. Quando a ordem é alterada, o resultado tende a se alterar também. Existem formas de programar pipes, onde isso não será um problema, mas em nosso exemplo, é. Tenha isso em mente.
Conclusão
A utilização pipes se torna simples em colocar funções em uma sequência lógica para atender um requisito, mesmo que estranho. É amplamente utilizado no elixir e recomendado. Devemos sempre seguir a regra de, o primeiro argumento deve vir antes da chamada da função
Pense bem ao utilizar pipes, podem ser uma boa forma de melhorar a legibilidade de seu código.
Last updated