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
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
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
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.
Top comments (0)