Protocolo do for genérico
Compreenda o protocolo de iterador com três valores: função iteradora, estado e variável de controle.
Protocolo do for genérico é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 1 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.
Como funciona o for genérico
A instrução for chama uma função iteradora a cada iteração. Ela passa um estado e uma variável de controle e para quando a função retorna nil.
Retorno de três valores
for var in iter, state, init do — Lua desempacota isso como: função iteradora iter, estado invariável state e variável de controle inicial init.
Protocolo ipairs
ipairs(t) retorna uma função iteradora sem estado, a tabela como estado e 0 como variável de controle inicial. Cada chamada retorna o próximo índice e valor.
for i, v in ipairs({10, 20, 30}) do
print(i, v)
endIterador personalizado de três valores
Implemente um iterador personalizado sem estado fornecendo explicitamente os três valores.
local function iter(t, i)
i = i + 1
local v = t[i]
if v then return i, v end
end
for i, v in iter, {"a","b","c"}, 0 do
print(i, v)
endSimplificando com um fechamento
Um iterador baseado em fechamento só precisa retornar a função iteradora (nenhum estado ou variável de controle é necessário — eles vivem nas variáveis externas).
local function values(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
for v in values({1,2,3}) do print(v) endnil encerra o loop
O loop for genérico termina assim que a função iteradora retorna nil como o primeiro valor de retorno. Esse é o contrato de término.
Vários valores de retorno
O iterador pode retornar vários valores; cada um é associado a uma variável do loop: for k, v in pairs(t).
for k, v in pairs({x=1, y=2}) do
print(k, v)
endUso do parâmetro de estado
O parâmetro de estado é passado sem alterações a cada chamada do iterador. Para iteradores sem estado, ele contém todo o contexto necessário (por exemplo, a própria tabela).
Coroutine.wrap como iterador
coroutine.wrap(fn) retorna uma função que retoma a corrotina a cada chamada; os valores produzidos tornam-se valores de retorno — perfeito como iterador de um for genérico.
local function countdown(n)
return coroutine.wrap(function()
for i = n, 1, -1 do coroutine.yield(i) end
end)
end
for v in countdown(5) do print(v) endComposição de iteradores
Os iteradores podem ser compostos: envolva um iterador em outro para adicionar filtragem ou transformação.
local function mapped(iter, fn)
return function()
local v = iter()
if v ~= nil then return fn(v) end
end
endIteradores infinitos
Um iterador que nunca retorna nil cria um loop infinito. Sempre forneça uma condição de término ou break.
local function naturals()
local n = 0
return function() n = n+1; return n end
end
for v in naturals() do
if v > 5 then break end
print(v)
endPergunta sobre for genérico
Quando o loop for genérico termina?
Recapitulação: protocolo do for genérico
O for genérico chama uma função iteradora com um estado invariável e uma variável de controle. Ele para ao receber nil. Os fechamentos simplificam iteradores com estado ao codificar o estado em variáveis externas.
Perguntas Frequentes
A aula “Protocolo do for genérico” é grátis?
Sim — o texto completo de “Protocolo do for genérico” é 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 “Protocolo do for genérico”?
Compreenda o protocolo de iterador com três valores: função iteradora, estado e variável de controle. 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 1 de 4.
Quanto tempo leva a aula “Protocolo do for genérico”?
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
- Protocolo do for genérico
- Iteradores sem estado
- Iteradores com estado usando fechamentos
- Geradores baseados em corrotinas