AULA 25 MÓDULO 2 programação funcional ⏱ 50 min

Funções Puras e Imutabilidade

Funções puras: mesmo input = mesmo output, sem efeitos colaterais. Imutabilidade: nunca mute, sempre crie novos. Spread operator e Object.assign.

funções purasimutabilidadeefeitos colateraisspreadestado

Funções puras

Uma função pura tem duas regras: 1) para o mesmo input, sempre retorna o mesmo output. 2) não tem efeitos colaterais (não modifica estado externo, não chama banco, não loga).

✗ NÃO pura — resultado depende de estado externo
let tax = 0.1
const getTotal = (price) => price * (1 + tax) // depende de `tax`
✓ Pura — mesmo input, mesmo output sempre
const getTotal = (price, tax) => price * (1 + tax) // tudo via parâmetro

Imutabilidade

Imutabilidade significa não modificar dados existentes — sempre criar novos. Em vez de fazer push em um array, crie um novo array. Em vez de mudar uma propriedade, crie um novo objeto.

✗ Mutável — modifica o array original
tasks.push(newTask) // muta o array!
✓ Imutável — retorna novo array
const newTasks = [...tasks, newTask] // original intacto
🔒
por que imutabilidade?
Dados imutáveis são seguros para compartilhar entre funções. Sem surpresas de quem mudou o quê. React, Redux e toda a arquitetura de frontend moderna é baseada em imutabilidade.
javascript
// Funções puras e imutabilidade em prática

// ✓ Pura: preço com desconto
const applyDiscount = (price, pct) => price * (1 - pct)
// applyDiscount(100, 0.1) === 90 — sempre

// ✓ Imutável: adicionar item ao carrinho
const addToCart = (cart, item) => [...cart, item]

// ✓ Imutável: atualizar campo em objeto
const updateUser = (user, updates) => ({ ...user, ...updates })

// ✓ Imutável: remover do array
const removeById = (list, id) => list.filter(item => item.id !== id)

// Uso encadeado — transformação sem mutação
const cart = []
const cart1 = addToCart(cart,  { id: 1, name: 'Livro', price: 50 })
const cart2 = addToCart(cart1, { id: 2, name: 'Curso', price: 200 })
// cart ainda é [] — nunca foi modificado
quiz · aula 25
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
Uma função pura pode...
QUESTÃO 02
Por que [...tasks, newTask] é preferível a tasks.push(newTask)?
QUESTÃO 03
Qual prática viola a imutabilidade?
0/3