0Pricing
Lua Academy · Aula

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))  -- 15

Fá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 4

Gerador 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) end

Aplicaçã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))  -- 15

Fá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
end

Analisador 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
end

Geradores 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))  -- 7

Pergunta 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

  1. O que são upvalues?
  2. Upvalues compartilhados entre fechamentos
  3. Funções fábrica e geradores
  4. Memoização com fechamentos
← Voltar para Lua Academy