Funções fábrica e geradores
Use fechamentos como funções fábrica para produzir instâncias de funções configuradas.
Funções fábrica e geradores é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
O que é uma função fábrica?
Uma função fábrica é uma função que cria e retorna outras funções, configuradas pelos seus argumentos e pelas suas variáveis externas.
Fábrica simples de multiplicadores
Cada chamada de multiplier retorna um novo fechamento que captura um factor diferente.
local function multiplier(factor)
return function(x) return x * factor end
end
local double = multiplier(2)
local triple = multiplier(3)
print(double(5)) -- 10
print(triple(5)) -- 15Fábrica configurável de registradores
Uma fábrica de registradores captura uma cadeia de prefixo e retorna uma função de registro.
local function makeLogger(prefix)
return function(msg)
print("[" .. prefix .. "] " .. msg)
end
end
local info = makeLogger("INFO")
local warn = makeLogger("WARN")
info("started")
warn("low memory")Gerador de contadores
Um gerador mantém um estado interno e produz um novo valor a cada chamada.
local function counter(start, step)
local n = start - step
return function()
n = n + step
return n
end
end
local evens = counter(0, 2)
print(evens(), evens(), evens()) -- 0 2 4Gerador de intervalos
Um gerador de intervalos produz valores de from até to, retornando nil quando se esgota.
local function range(from, to, step)
step = step or 1
local i = from - step
return function()
i = i + step
if i <= to then return i end
end
end
for v in range(1, 5) do print(v) endAplicação parcial
Uma fábrica aplica parcialmente argumentos para criar uma versão especializada de uma função.
local function partial(fn, ...)
local args = {...}
return function(...)
local all = {table.unpack(args)}
for _, v in ipairs({...}) do all[#all+1] = v end
return fn(table.unpack(all))
end
end
local add = function(a,b) return a+b end
local add10 = partial(add, 10)
print(add10(5)) -- 15Fábrica com memorização
Uma fábrica pode construir uma versão com memorização de uma função dispendiosa.
local function memoize(fn)
local cache = {}
return function(x)
if cache[x] == nil then cache[x] = fn(x) end
return cache[x]
end
endAnalisador léxico de tokens com estado
Uma fábrica de analisadores léxicos captura a cadeia de entrada e a posição, produzindo o próximo token a cada chamada.
local function lexer(input)
local pos = 1
return function()
if pos > #input then return nil end
local token = input:match("%S+", pos)
if token then pos = pos + #token + 1 end
return token
end
endGeradores vs. corrotinas
Geradores baseados em fechamentos são mais simples, mas mantêm todo o estado em variáveis externas. Geradores baseados em corrotinas são mais poderosos e permitem usar yield em qualquer ponto de uma lógica complexa.
Modelos de funções
As fábricas criam modelos de funções — padrões comuns parametrizados no momento da criação, reutilizados muitas vezes com configurações diferentes.
Currying
Uma função com currying recebe os argumentos um de cada vez e retorna uma nova função até que todos os argumentos sejam fornecidos.
local function curry2(fn)
return function(a)
return function(b)
return fn(a, b)
end
end
end
local curriedAdd = curry2(function(a,b) return a+b end)
print(curriedAdd(3)(4)) -- 7Pergunta sobre funções fábrica
Qual é uma característica fundamental das funções fábrica?
Recapitulação: funções fábrica
As funções fábrica produzem fechamentos configurados, permitindo aplicação parcial, geradores, memorização e currying. Elas são um dos padrões funcionais mais poderosos de Lua.
Perguntas Frequentes
A aula “Funções fábrica e geradores” é grátis?
Sim — o texto completo de “Funções fábrica e geradores” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “Funções fábrica e geradores”?
Use fechamentos como funções fábrica para produzir instâncias de funções configuradas. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Funções fábrica e geradores”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- O que são upvalues?
- Upvalues compartilhados entre fechamentos
- Funções fábrica e geradores
- Memoização com fechamentos