0Pricing
Lua Academy · Lección

Protocolo de for genérico

Comprenda el protocolo de iteradores de tres valores: función iteradora, estado y variable de control.

Protocolo de for genérico es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 1 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.

Cómo funciona Generic for

La instrucción for llama a una función iteradora en cada iteración. Le pasa un estado y una variable de control, y se detiene cuando la función devuelve nil.

Retorno de tres valores

for var in iter, state, init do: Lua descompone esto como: función iteradora iter, estado invariable state y variable de control inicial init.

Protocolo de ipairs

ipairs(t) devuelve una función iteradora sin estado, la tabla como estado y 0 como variable de control inicial. Cada llamada devuelve el siguiente índice y su valor.

for i, v in ipairs({10, 20, 30}) do
  print(i, v)
end

Iterador personalizado de tres valores

Implemente un iterador personalizado sin estado proporcionando explícitamente los tres 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

Simplificación mediante un closure

Un iterador basado en un closure solo necesita devolver la función iteradora (no necesita un estado ni una variable de control, ya que viven en los upvalues).

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 termina el bucle

El bucle generic for termina en cuanto la función iteradora devuelve nil como primer valor de retorno. Este es el contrato de terminación.

Varios valores de retorno

El iterador puede devolver varios valores; cada uno se asigna a una variable del bucle: for k, v in pairs(t).

for k, v in pairs({x=1, y=2}) do
  print(k, v)
end

Uso del parámetro de estado

El parámetro de estado se pasa sin cambios a cada llamada del iterador. En los iteradores sin estado, contiene todo el contexto necesario (por ejemplo, la propia tabla).

Coroutine.wrap como iterador

coroutine.wrap(fn) devuelve una función que reanuda la coroutine en cada llamada; los valores producidos con yield se convierten en valores de retorno, lo que resulta perfecto como iterador de un generic for.

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

Composición de iteradores

Los iteradores pueden componerse: envuelva un iterador en otro para añadir filtrado o transformación.

local function mapped(iter, fn)
  return function()
    local v = iter()
    if v ~= nil then return fn(v) end
  end
end

Iteradores infinitos

Un iterador que nunca devuelve nil crea un bucle infinito. Proporcione siempre una condición de terminación o use 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

Pregunta sobre Generic for

¿Cuándo se detiene el bucle generic for?

Resumen: protocolo Generic for

El generic for llama a una función iteradora con un estado invariable y una variable de control. Se detiene al recibir nil. Los closures simplifican los iteradores con estado al codificarlo en upvalues.

Preguntas frecuentes

¿La lección «Protocolo de for genérico» es gratis?

Sí — el texto completo de «Protocolo de for genérico» 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 «Protocolo de for genérico»?

Comprenda el protocolo de iteradores de tres valores: función iteradora, estado y variable de control. 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 1 de 4.

¿Cuánto tiempo toma la lección «Protocolo de for genérico»?

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