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