Revisão de Programação Funcional em JavaScript

Funções Puras vs Impuras

  • Uma função pura é aquela que sempre produz a mesma saída para a mesma entrada e não possui efeitos colaterais. Sua saída depende apenas da sua entrada e ela não modifica nenhum estado externo.
  • Funções impuras têm efeitos colaterais, que são mudanças no estado do programa que são observáveis fora da função.

Programação funcional

  • Programação Funcional é uma abordagem para desenvolvimento de software que enfatiza o uso de funções para resolver problemas, focando no que precisa ser feito e não em como fazer.
  • A programação funcional incentiva o uso de técnicas que ajudam a evitar efeitos colaterais, como o uso de estruturas de dados imutáveis e funções de ordem superior.
  • Quando usados corretamente, os princípios da programação funcional levam a um código mais limpo e mais fácil de manter

Currying

  • Currying é uma técnica de programação funcional que transforma uma função com múltiplos argumentos em uma sequência de funções, cada uma recebendo um único argumento.
Aqui está um exemplo de uma função regular e uma função curried:
// Regular function
function average(a, b, c) {
  return (a + b + c) / 3;
}

console.log(average(2, 3, 4)); // 3

// Curried function
function curriedAverage(a) {
  return function(b) {
    return function(c) {
      return (a + b + c) / 3;
    };
  };
}

console.log(curriedAverage(2)(3)(4)); // 3
  • Currying pode ser particularmente poderoso ao trabalhar com funções que recebem muitos argumentos.
  • Currying torna seu código mais flexível e mais fácil de reutilizar.
  • Você pode usar funções arrow para criar funções curried de forma mais concisa:
const curriedAverage = a => b => c => (a + b + c) / 3;
  • Embora o currying possa levar a um código mais flexível e reutilizável, ele também pode tornar o código mais difícil de ler se for usado em excesso.