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
Com pipe, é um pouco diferente.
A troca da sequência, onde colocamos o parâmetro antes da função nos possibilita encadear várias funções.
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