0Pricing
Lua Academy · Aula

Iteradores sem estado

Escreva iteradores sem estado como ipairs e implemente variantes personalizadas.

Iteradores sem estado é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 2 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 é um iterador sem estado?

Um iterador sem estado não mantém estado interno. Todas as informações são passadas como argumentos a cada chamada: o estado invariável e a variável de controle atual.

ipairs: o exemplo clássico

ipairs não tem estado — usa a tabela como estado e o índice atual como variável de controle.

local function myIpairs(t, i)
  i = i + 1
  local v = t[i]
  if v ~= nil then return i, v end
end
-- Use: for i,v in myIpairs, t, 0 do

Iterador squares

Um iterador sem estado que retorna quadrados consecutivos. O estado contém o limite, e a variável de controle é o número atual.

local function squaresIter(max, n)
  n = n + 1
  if n <= max then return n, n*n end
end
for n, sq in squaresIter, 5, 0 do
  print(n, sq)
end

Nenhum fechamento é necessário

Iteradores sem estado evitam a alocação de fechamentos. Como todo o estado é passado como argumento, não há alocação no heap por iteração.

Implementando um iterador no estilo de pairs

Um iterador sem estado de chave e valor que usa next como função iteradora — exatamente como pairs funciona.

for k, v in next, {a=1, b=2} do
  print(k, v)
end

Função next

next(t, k) retorna o próximo par de chave e valor depois da chave k. Passe nil (ou omita-o) para começar do início.

local t = {x=10, y=20}
local k, v = next(t, nil)
print(k, v)
k, v = next(t, k)
print(k, v)

Iterador personalizado de intervalo

Um iterador sem estado de intervalo com passo. O estado contém uma tabela de configuração; o controle é o valor atual.

local function rangeIter(state, n)
  n = n + state.step
  if n <= state.limit then return n end
end
for v in rangeIter, {limit=10, step=2}, 0 do
  print(v)
end

Vantagem de desempenho

Iteradores sem estado são ideais para loops intensivos. Nenhum fechamento é criado por chamada, o que os torna mais rápidos que iteradores com estado baseados em fechamentos em percursos simples.

Limitações

Quando a iteração exige um estado complexo (vários contadores, filas ou dados dinâmicos), os iteradores sem estado se tornam pouco práticos. Em vez disso, use iteradores com estado baseados em fechamentos ou corrotinas.

Combinando com table.move

Um iterador sem estado de fatias retorna elementos de uma fatia de tabela. O estado invariável contém o vetor e o índice final; o controle é o índice atual.

Iteradores sem estado da biblioteca padrão

ipairs, pairs (por meio de next) e string.gmatch usam internamente projetos sem estado ou quase sem estado.

Pergunta sobre iteradores sem estado

O que torna um iterador sem estado?

Recapitulação: iteradores sem estado

Iteradores sem estado recebem todo o contexto como argumentos, não exigem alocação de fechamentos e têm alto desempenho. São ideais para percursos sequenciais simples, como a indexação de vetores.

Perguntas Frequentes

A aula “Iteradores sem estado” é grátis?

Sim — o texto completo de “Iteradores sem estado” é 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 “Iteradores sem estado”?

Escreva iteradores sem estado como ipairs e implemente variantes personalizadas. 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 2 de 4.

Quanto tempo leva a aula “Iteradores sem estado”?

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