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.

circle-info

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.

  1. Dado um valor vamos

  2. Somar o valor de entrada por 10;

  3. Multiplicar o valor por 2;

  4. 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.

circle-exclamation

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