Pipe operator em JavaScript com o Babel

Marcelo Camargo
Rung Developers
Published in
2 min readNov 27, 2017

…ou como ter um fluxo decente e legível ao trabalhar com funções

Quando trabalhamos diretamente com funções em JavaScript, é comum nos perdermos em meio à complexa pilha de chamadas encadeadas e dezenas de parênteses um tanto confusos. O operador de pipe é comum nas linguagens funcionais, como LiveScript, OCaml, Elixir e F#, e ajuda a modelar o fluxo de uma forma mais humana do que a composição direta.

Se você usa o Babel, deve saber que o compilador possui uma extensividade tremenda. No Rung, utilizamos amplamente a extensibilidade do compilador para modelar soluções para nossos problemas; normalmente através de plugins para o compilador.

Há a proposta do operador de pipe |> para JavaScript, mas ela possui diversas limitações (como não permitir corretamente parcialização), e dificulta o trabalho com algumas bibliotecas, como a Ramda. No entanto, não nos limitaremos. Podemos sobrecarregar o operador | para trabalhar com funções.

Configure o Babel

O processo é relativamente simples. O plugin está disponível no GitHub. Tudo que precisamos fazer é instalá-lo como dependência de desenvolvimento e adicionar sua configuração ao .babelrc:

npm install --save-dev babel-plugin-pipe-operator-curry

E no .babelrc:

"plugins": ["pipe-operator-curry"]

Então, toda ocorrência de x | f(y) será substituída por f(y)(x).

Isso nos permite simplificar grandemente séries de transformações:

Se você trabalha amplamente com funções, outra utilidade pode ser o babel-plugin-function-composition, que sobrecarrega o operador & para compor funções e retornar funções mais complexas a partir disso. Dessa maneira, poderíamos modelar o exemplo acima por composição, criando uma função isolada e usando tacit programming, também conhecida como programação point-free, onde funções são criadas mesmo com os argumentos omitidos:

Nessa situação, getValue será não um valor literal, mas uma função, que quando aplicada a uma lista sequenciará as computações. Utilizamos ali uma técnica conhecida como aplicação parcial.

Não tenha medo do compilador

O Babel é seu amigo. Não tenha medo dele. A sua extensibilidade permite adaptar a linguagem da maneira que melhor resolve seu problema, e existem diversos plugins excelentes para ele. Aproveite sem medo 😄!

Referências

--

--