Funções puras
Uma função pura segue duas regras:
- Determinismo: com os mesmos argumentos, sempre retorna o mesmo resultado.
- Sem efeitos colaterais: não modifica nada fora dela (variáveis externas, o DOM, o array que recebe...).
// Pura: depende apenas dos seus argumentos
function somar(a, b) {
return a + b;
}
// Impura: depende de algo externo e o modifica
let total = 0;
function acumular(n) {
total += n; // efeito colateral
}
As funções puras são fáceis de testar, de raciocinar e de reutilizar, porque não guardam estado oculto nem causam surpresas.
Imutabilidade
Em vez de modificar dados, a programação funcional prefere criar cópias novas com as alterações aplicadas. Assim ninguém é afetado por modificações inesperadas:
const numeros = [1, 2, 3];
// Mutar (evite no estilo funcional):
numeros.push(4);
// Imutável: cria um array novo
const ampliado = [...numeros, 4];
Para objetos usa-se o spread da mesma forma:
const usuario = { nome: "Ana", idade: 30 };
const maisVelho = { ...usuario, idade: 31 }; // cópia com uma alteração
Exemplos
Atualizar um objeto sem mutá-lo
const usuario = { nome: "Ana", idade: 30 };
const atualizado = { ...usuario, idade: 31 };
console.log(usuario.idade); // 30 (intacto)
console.log(atualizado.idade); // 31