Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Iterador e tipos
  2. Iterador customizado

Um iterador é um tipo de dado que armazena referências sobre elementos de coleções ou estruturas de dados dinâmicas. Essas coleções podem ser vetores, tables, string outros.

Tipos de iteradores:
  1. Stateless
  2. Statefull
  3. Built-in

O iterador stateless não mantém nenhum tipo de estado enquanto itera os elementos de uma coleção. Esse tipo de iterador não possui função anônima/lambda sendo executada/retornada para cada elemento iterado.

Exemplo 1
local col = {"valor1","valor2"}

for i, val in ipairs(col) do 
  print("idx:",ch,"valor:", val)
end
Saída
idx:	1	val:	valor1
idx:	2	val:	valor2

Um iterador stateful, armazena o estado do elemento da coleção devido a função anônima(closure) que usam variáveis locais, quando uma coleção é iterada, e é retornada pelo iterador.

Exemplo 2
col = {"str0", "str1", "str2"}
function iterador(colecao)
   local idx = 0
   return function () --closure
      idx = idx + 1
	  if idx <= #colecao then
        return colecao[idx]
      end
   end
end

for elem in iterador(col) do
   print(elem)
end
Saída
str0
str1
str2

Os iteradores builtin fornecidos pela linguagem lua são: ipairs que é usado iterar coleções que possuem índice e valor associado, e pairs que é usado para iterar coleções com chave-valor.

Exemplo 3: ipairs
local col = {"valor1","valor2"}

for i, val in ipairs(col) do 
  print("idx:",ch,"valor:", val)
end
Saída
idx:	1	val:	valor1
idx:	2	val:	valor2
Exemplo 4: pairs
local col = {}
col[1] = "str1"
col[2] = "str2"

for ch, val in pairs(col) do 
  print("chave:",ch,"valor:", val)
end
Saída
chave:	1	valor:	str1
chave:	2	valor:	str2

Lua permite a criação de iteradores customizados de acordo com as necessidades de nossas coleções. Para criar esse tipo de iterador, precisamos definir 2 funções:

  1. Filtra ou processa o elemento da coleção baseado em seu valor e índice ou chave,
  2. Retornar os elementos desejados
Sintaxe: filtro
function nome_funcao(valor, <indice>)
Sintaxe: iterador
function nome_funcao(valor)
Onde
valor: valor do elemento
<indice>: índice do elemento
Exemplo 5
function fdobro(parametro,indice)
   if indice < parametro then --limite/contador
      indice = indice + 1
      return indice, indice*2 --dobro
   end
end

function idobro(valor)
   return fdobro, valor,-1
end
   
for ind, val in idobro(4) do
   print("i:",ind,"v:", val)
end
Saída
i:	0	v:	0
i:	1	v:	2
i:	2	v:	4
i:	3	v:	6
i:	4	v:	8
  1. 15/09/2025 - revisão 4 - Ajustes: pontuais, sintaxes, objetivos e links internos
  2. 12/06/2025 - revisão 3 - Conteúdo reescrito
  3. 12/09/2024 - revisão 2 - Ajustes gramaticais, ajustes nos exemplo 1 e 2
  4. 03/10/2023 - revisão 1 - Correção em referências e erros gramaticais
  5. 26/05/2023 - versão inicial