AULA 26
MÓDULO 2
programação funcional
⏱ 50 min
Higher-Order Functions
map, filter, reduce — a tríade funcional. Closures: funções que lembram o escopo. Middlewares Express como closures práticas.
mapfilterreduceclosuresHOFmiddleware
O que são Higher-Order Functions
Uma higher-order function (HOF) é uma função que recebe outra função como argumento ou retorna uma função. Em JavaScript, as HOFs mais usadas são map, filter e reduce — a tríade funcional.
o trio sagrado
map transforma cada elemento. filter seleciona elementos. reduce colapsa uma lista em um único valor. Juntos, eles substituem 90% dos loops imperativos.map e filter
map(fn)
Transforma cada elemento. Retorna array do mesmo tamanho.
[1,2,3].map(x => x * 2) // [2,4,6]
filter(fn)
Seleciona elementos. Retorna subconjunto.
[1,2,3,4].filter(x => x % 2 === 0) // [2,4]
reduce(fn, acc)
Colapsa lista em valor. Mais versátil.
[1,2,3].reduce((acc,x) => acc+x, 0) // 6
Closures — funções que lembram
Uma closure é uma função que captura variáveis do escopo onde foi criada. É o mecanismo que permite criar funções configuráveis e fábricas de funções.
closures em Express
Todo middleware do Express é uma closure: função que captura o app ou banco de dados e retorna um handler. É por isso que você pode fazer: const auth = createAuth(secret) e usar auth como middleware.
javascript
// map, filter, reduce — a tríade funcional const orders = [ { id: 1, total: 150, paid: true }, { id: 2, total: 300, paid: false }, { id: 3, total: 80, paid: true }, ] // Somar total dos pedidos pagos const totalPago = orders .filter(o => o.paid) // [order1, order3] .map(o => o.total) // [150, 80] .reduce((sum, t) => sum + t, 0) // 230 // Closure — fábrica de multiplicadores const multiply = (factor) => (x) => x * factor const double = multiply(2) const triple = multiply(3) double(5) // 10 triple(5) // 15 // Closure em middleware Express const requireRole = (role) => (req, res, next) => { if (req.user?.role !== role) return res.status(403).json({ error: 'Forbidden' }) next() } app.delete('/admin/users/:id', requireRole('admin'), deleteUser)
quiz · aula 26
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
O que map() faz?
QUESTÃO 02
Qual o resultado de [1,2,3,4].filter(x => x > 2)?
QUESTÃO 03
O que é uma closure?
0/3