DEV Community

Cover image for Javascript Essentials 101: Higher-Order Functions, Currying, and Partial Application
João Pedro
João Pedro

Posted on • Edited on

2

Javascript Essentials 101: Higher-Order Functions, Currying, and Partial Application

JavaScript Essentials 101: Higher-Order Functions, Currying e Partial Application

Introdução

Nesse artigo vamos abordar conceitos fundamentais—técnicas e estruturas que sempre fizeram parte do JavaScript e são essenciais para escrever código limpo e eficiente. Mesmo que esses conceitos pareçam avançados, pense neles como parte do DNA do JavaScript.

Por que isso é importante?

Talvez você nunca tenha ouvido falar de higher-order functions, currying ou partial application, mas esses são conceitos fundamentais que tornam o código mais eficiente, reutilizável e escalável. Seja manipulando dados, otimizando chamadas de funções ou lidando com lógica complexa, essas técnicas são essenciais para entender o lado funcional do JavaScript.

Vamos explorar esses conceitos com exemplos práticos que mostram o quão úteis e poderosos eles são.


Higher-Order Functions

Uma higher-order function é qualquer função que recebe outra função como argumento ou retorna uma função como resultado. Essas funções são parte essencial do JavaScript, pois permitem aplicar técnicas de programação funcional, tornando a manipulação de dados mais limpa e intuitiva.

Exemplo: Vamos analisar map, filter e reduce, três higher-order functions que transformam arrays com uma sintaxe concisa:

const numbers = [1, 2, 3, 4, 5];

// Usando map para dobrar cada número
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6, 8, 10]

// Usando filter para obter apenas os números pares
const evens = numbers.filter(num => num % 2 === 0);
console.log(evens); // [2, 4]

// Usando reduce para somar todos os números
const sum = numbers.reduce((acc, num) => acc + num, 0);
console.log(sum); // 15
Enter fullscreen mode Exit fullscreen mode

Currying

Currying transforma uma função com múltiplos argumentos em uma sequência de funções, cada uma recebendo um único argumento. Essa técnica é útil para dividir operações complexas em partes menores e reutilizáveis, tornando o código mais modular.

Exemplo: Aqui está uma função de soma utilizando currying:

const add = a => b => a + b;
const addFive = add(5);

console.log(addFive(3)); // 8
console.log(addFive(10)); // 15
Enter fullscreen mode Exit fullscreen mode

Com currying, criamos a função addFive a partir de add, permitindo reutilizar essa operação específica em diferentes partes do código.


Partial Application

Partial application é semelhante ao currying, mas permite preencher alguns argumentos de uma função, deixando os demais dinâmicos. Essa abordagem é útil para tarefas repetitivas com parâmetros fixos.

Exemplo: Vamos aplicar uma taxa de imposto de 20% a diferentes preços:

const applyTax = (rate, price) => price * (1 + rate);
const applyVAT = applyTax.bind(null, 0.2); // Define taxa fixa de 20%

console.log(applyVAT(100)); // 120
console.log(applyVAT(200)); // 240
Enter fullscreen mode Exit fullscreen mode

Aqui, applyVAT permite calcular rapidamente os preços com uma taxa de imposto fixa, tornando o código mais enxuto e legível.


Conclusão

Essas funções podem parecer "avançadas", mas são ferramentas essenciais para dominar o JavaScript. Ao entender higher-order functions, currying e partial application, você escreverá código mais limpo, eficiente e fácil de testar e manter. No próximo capítulo, continuaremos explorando esses conceitos para desbloquear todo o potencial do JavaScript. Continue estudando—você está investindo em fundamentos que elevarão suas habilidades e confiança como desenvolvedor.

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Retry later
Retry later