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`
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