for genérico y break
Utilice for genérico con pairs/ipairs y controle el flujo del bucle con break.
for genérico y break es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 4 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.
Protocolo de for genérico
El bucle for genérico de Lua funciona con una función iteradora. La sintaxis es for vars in iter_func, state, init do. En cada iteración, Lua llama a iter_func(state, lastVar) y asigna los valores devueltos a vars. El bucle se detiene cuando el primer valor devuelto es nil.
-- Manual use of next() iterator
local t = {a=1, b=2, c=3}
local key, val = next(t, nil) -- first entry
while key ~= nil do
print(key, val)
key, val = next(t, key) -- advance
endpairs() para todas las claves
pairs(t) devuelve un iterador que recorre todos los pares clave-valor de una tabla, incluidas las claves de cadena, las claves enteras y las tablas con ambos tipos. El orden de iteración de las claves no enteras no está especificado (orden del hash). Se incluyen tanto la parte de array como la parte hash.
local config = {
host = "localhost",
port = 8080,
debug = true,
[1] = "first",
}
for key, value in pairs(config) do
print(key, value)
end
-- Prints all 4 entries in any orderipairs() para claves de array
ipairs(t) recorre las claves enteras comenzando por 1 y se detiene ante el primer valor nil. Es seguro, predecible y conserva el orden. Utilice ipairs para tablas similares a arrays cuando el orden sea importante y quiera detenerse ante el primer hueco.
local fruits = {"apple", "banana", "cherry"}
for i, fruit in ipairs(fruits) do
print(i, fruit)
end
-- 1 apple
-- 2 banana
-- 3 cherry
-- stops at first nil
local t = {10, 20, nil, 40}
for i, v in ipairs(t) do
print(i, v) -- only 1,10 and 2,20
endpairs frente a ipairs
Sepa cuándo utilizar cada uno: ipairs se usa para arrays secuenciales ordenados; pairs, para diccionarios o tablas mixtas. ipairs se detiene ante el primer hueco con nil; pairs visita todas las claves cuyo valor no es nil. Para arrays puros, ipairs es más idiomático.
local mixed = {10, 20, key="val", 30}
-- ipairs only sees array part in order
print("ipairs:")
for i, v in ipairs(mixed) do
print(i, v) -- 1:10, 2:20, 3:30
end
-- pairs sees everything
print("pairs:")
for k, v in pairs(mixed) do
print(k, v) -- 1:10, 2:20, 3:30, key:val
endIterador personalizado con un cierre
Puede escribir su propio iterador como un cierre. La función fábrica devuelve un cierre con estado que avanza la posición en cada llamada. Cuando no queda nada que devolver, devuelve nil para detener el for genérico.
local function range(from, to, step)
step = step or 1
local i = from - step
return function()
i = i + step
if i <= to then return i end
end
end
for n in range(1, 10, 2) do
io.write(n .. " ")
end
print() -- 1 3 5 7 9string.gmatch como iterador
string.gmatch(s, pattern) devuelve un iterador sobre todas las coincidencias del patrón en la cadena s. Se utiliza habitualmente para dividir cadenas, extraer tokens o encontrar todas las apariciones de un patrón.
local sentence = "the quick brown fox"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- the
-- quick
-- brown
-- foxbreak en un for genérico
Puede salir anticipadamente de un bucle for genérico mediante break. Esto resulta útil para buscar: recorra los elementos hasta encontrar una coincidencia y, a continuación, utilice break. Después de salir, la ejecución continúa en la instrucción situada después de end.
local inventory = {
{name="sword", damage=50},
{name="shield", armor=30},
{name="bow", damage=35},
}
local target = "shield"
for i, item in ipairs(inventory) do
if item.name == target then
print("Found at index", i)
break
end
endModificar tablas durante la iteración
No inserte ni elimine claves de una tabla mientras la recorre con pairs(); el comportamiento no está definido (es posible que algunos cambios se detecten y otros se omitan). Si necesita modificar una tabla, recopile los cambios en una lista temporal y aplíquelos después del bucle.
local t = {a=1, b=2, c=3, d=4}
local toDelete = {}
-- Collect keys to delete
for k, v in pairs(t) do
if v % 2 == 0 then
toDelete[#toDelete+1] = k
end
end
-- Delete after iteration
for _, k in ipairs(toDelete) do
t[k] = nil
end
-- t = {a=1, c=3}Patrón de enumeración
Cuando necesite tanto el índice como el valor, utilice ipairs, que proporciona ambos. Cuando solo necesite los valores y no le importe el índice, puede utilizar _ como nombre convencional de variable cuyo valor no se utiliza para el índice.
local colors = {"red", "green", "blue"}
-- With index
for i, color in ipairs(colors) do
print(i .. ": " .. color)
end
-- Ignore index with _
for _, color in ipairs(colors) do
print(color) -- just the values
endnext() directamente
next(t, key) es la función subyacente para recorrer una tabla. Devuelve el siguiente par clave-valor después de key, o nil si no quedan más. next(t, nil) devuelve la primera entrada. Puede utilizar next(t) ~= nil para comprobar si una tabla no está vacía; es más rápido que contar sus elementos.
local function isEmpty(t)
return next(t) == nil
end
print(isEmpty({})) -- true
print(isEmpty({1,2,3})) -- false
print(isEmpty({a=1})) -- falseComprobación rápida
¿Qué iterador se detiene ante el primer nil en una tabla?
Resumen: for genérico y break
Resumen:
pairs(t): todas las claves, en cualquier ordenipairs(t): claves enteras de 1 a n, ordenadas, se detiene ante nil- Iteradores personalizados: devuelva un cierre que devuelva nil para detenerse
breakpermite salir anticipadamente del bucle- No modifique una tabla durante un recorrido con pairs; recopile los cambios y aplíquelos después
next(t) == nil: comprobación rápida de tabla vacía
Preguntas frecuentes
¿La lección «for genérico y break» es gratis?
Sí — el texto completo de «for genérico y break» 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 «for genérico y break»?
Utilice for genérico con pairs/ipairs y controle el flujo del bucle con break. 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 4 de 4.
¿Cuánto tiempo toma la lección «for genérico y break»?
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
- Sentencias if, elseif y else
- Bucles while y repeat-until
- Bucle for numérico
- for genérico y break