DEV Community

lucas souza
lucas souza

Posted on

1 1

O operador pipeline e a programação funcional

Pipeline

O operador experimental pipeline |> (atualmente no estágio 1) permite a criação de chamadas de funções encadeadas de maneira legível. Basicamente, o operador de pipeline fornece açúcar sintático em uma chamada de função com um único argumento, permitindo que você escreva:

'%21' |> decodeURI

ao invés de

decodeURI('%21')

Essa é a definição dada pela MDN ao operador pipeline, que ainda está em fase de aprovação no ECMAScript. Mas por que esse operador seria útil na programação funcional?

Mas, por quê?

Se você já teve algum contato com a programação funcional, pode ter se deparado com os padrões de funções pipe e compose, que basicamente são dois conceitos de composição de funções.

A composição de funções a grosso modo é definida pela execução de diversas funções encadeadas, sendo que cada função pode retornar uma outra função. É muito útil na programação funcional, pois simplifica código, tornando-o mais limpo e mais reutilizável. Um exemplo de composição de funções:

getPair = arr => arr.filter(number => number%2===0)
multiply = arr => arr.map(number => number*2)

getPair([1,2,3,4,5]); // [2, 4]
multiply(getPair([1,2,3,4,5])) // [4, 8]

É um conceito fundamental na programação funcional, mas que não entraremos em detalhes aqui.

O fato é que, o pipeline operator pode ser facilmente utilizado para simplificar a visibilidade na composição de funções. Onde o mesmo caso acima, fica dessa forma:

const getPair = arr => arr.filter(number => number%2===0)
const multiply = arr => arr.map(number => number*2)
[1,2,3,4,5] |> getPair // [2, 4]
[1,2,3,4,5] |> getPair |> multiply // [4,8]

Perceba que a visualização da sequência no qual as funções serão executadas fica muito mais simples, e em funções como o pipe e o compose, onde a ordem é principal diferença do uso, o pipeline acabou facilitando muito.

Babel

Babel
Já é possível utilizar o pipeline operator através do babel, caso não conheça o babel, ele é um poderoso compilador javascript capaz de transpilar códigos ainda não aceitos por navegadores em um novo código legível.

Vamos começar:

Em um novo diretório, instale as dependências:

yarn add --dev @babel/core @babel/cli @babel/preset-env
yarn add @babel/polyfill
yarn add --dev @babel/plugin-proposal-pipeline-operator

Crie um novo arquivo, chamado .babelrc:

{
   "presets": [
      "@babel/env"
   ],
   "plugins": [
      [
         "@babel/plugin-proposal-pipeline-operator",
            { "proposal": "minimal" }
      ]
   ]
}

No package.json:

"scripts": {
  "babel": "./node_modules/.bin/babel src --out-dir dist",
  "start": "node dist/index"
},

Agora, vamos começar a utilizar o operador:

// index.js
const getPair = arr => arr.filter(number => number%2===0)
const multiply = arr => arr.map(number => number*2)
const test = [1,2,3,4,5] |> getPair |> multiply
console.log(test);

Agora basta executar os scripts, e seu código será transpilado e executado:

yarn babel
yarn start

Acompanhe o mesmo código no github, aqui.

Encontrou algum erro no conteúdo? Por favor, comente aqui.

Image of Quadratic

The best Excel alternative with Python built-in

Quadratic is the all-in-one, browser-based AI spreadsheet that goes beyond traditional formulas for powerful visualizations and fast analysis.

Try Quadratic free

Top comments (0)

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay