0Pricing
Lua Academy · Aula

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

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

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

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

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

Composiçã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
end

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

Pergunta 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

  1. Protocolo do for genérico
  2. Iteradores sem estado
  3. Iteradores com estado usando fechamentos
  4. Geradores baseados em corrotinas
← Voltar para Lua Academy