0Pricing
Lua Academy · Lección

Iteradores sin estado

Escriba iteradores sin estado como ipairs e implemente variantes personalizadas.

Iteradores sin estado es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué es un iterador sin estado?

Un iterador sin estado no contiene un estado interno. Toda la información se pasa como argumentos en cada llamada: el estado invariable y la variable de control actual.

ipairs: el ejemplo canónico

ipairs no tiene estado: utiliza la tabla como estado y el índice actual como variable de control.

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

Un iterador sin estado que devuelve cuadrados consecutivos. El estado contiene el límite y la variable de control es el número actual.

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

No se necesita un closure

Los iteradores sin estado evitan asignar closures. Como todo el estado se pasa como argumento, no se asigna memoria en el heap en cada iteración.

Implementación de un iterador al estilo de pairs

Un iterador de pares clave-valor sin estado que usa next como función iteradora, exactamente como funciona pairs.

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

Función next

next(t, k) devuelve el siguiente par clave-valor después de la clave k. Pase nil (u omítalo) para comenzar desde el principio.

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

Iterador de rangos personalizado

Un iterador de rangos sin estado y con paso. El estado contiene una tabla de configuración y el control es el valor actual.

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

Ventaja de rendimiento

Los iteradores sin estado son ideales para bucles intensivos. No se crea un closure en cada llamada, por lo que son más rápidos que los iteradores con estado basados en closures para recorridos sencillos.

Limitaciones

Cuando la iteración requiere un estado complejo (varios contadores, colas o datos dinámicos), los iteradores sin estado resultan poco prácticos. Use en su lugar iteradores con estado basados en closures o coroutines.

Combinación con table.move

Un iterador de segmentos sin estado devuelve elementos de un segmento de una tabla. El estado invariable contiene el array y el índice final; el control es el índice actual.

Iteradores sin estado de la biblioteca estándar

ipairs, pairs (mediante next) y string.gmatch utilizan internamente diseños sin estado o prácticamente sin estado.

Pregunta sobre iteradores sin estado

¿Qué hace que un iterador no tenga estado?

Resumen: iteradores sin estado

Los iteradores sin estado reciben todo el contexto como argumentos, no necesitan asignar closures y ofrecen un rendimiento excelente. Son ideales para recorridos secuenciales sencillos, como indexar arrays.

Preguntas frecuentes

¿La lección «Iteradores sin estado» es gratis?

Sí — el texto completo de «Iteradores sin estado» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Iteradores sin estado»?

Escriba iteradores sin estado como ipairs e implemente variantes personalizadas. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Lua Academy?

No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Iteradores sin estado»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Lua Academy?

Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Protocolo de for genérico
  2. Iteradores sin estado
  3. Iteradores con estado mediante closures
  4. Generadores basados en coroutines
← Volver a Lua Academy