Bucles while y repeat-until
Utilice while y repeat-until para realizar iteraciones controladas por condiciones.
Bucles while y repeat-until 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.
El bucle while
Un bucle while repite su cuerpo mientras la condición sea verdadera. La condición se comprueba antes de cada iteración. Si la condición es falsa inicialmente, el cuerpo no se ejecuta nunca. Asegúrese siempre de que el bucle avance hacia la condición de salida para evitar bucles infinitos.
local count = 1
while count <= 5 do
print(count)
count = count + 1
end
-- prints 1 through 5Bucle repeat-until
El bucle repeat...until es el equivalente de do-while en Lua. El cuerpo se ejecuta al menos una vez y la condición se comprueba después de cada iteración. El bucle se detiene cuando la condición se vuelve verdadera (lo contrario que while). Las variables declaradas dentro del cuerpo son visibles en la condición.
local n = 1
repeat
print(n)
n = n * 2
until n > 100
-- prints: 1, 2, 4, 8, 16, 32, 64Bucles infinitos con break
Utilice while true do para bucles de eventos o patrones de reintento, junto con break para salir cuando se cumpla una condición. Este patrón es habitual en los bucles principales de los juegos y en servidores de red que se ejecutan continuamente.
local attempts = 0
local MAX = 3
while true do
attempts = attempts + 1
print("Attempt " .. attempts)
if attempts >= MAX then
print("Max attempts reached")
break
end
endCuenta regresiva con while
Los bucles while también funcionan perfectamente para contar hacia abajo. La clave consiste en actualizar la variable de una forma que termine cumpliendo la condición de salida. Olvidar actualizar el contador es una causa frecuente de bucles infinitos.
local i = 10
while i > 0 do
io.write(i .. " ")
i = i - 1
end
print() -- newline
-- output: 10 9 8 7 6 5 4 3 2 1repeat-until para validar entradas
El patrón repeat-until es ideal para validar entradas: solicitar el dato una vez y comprobarlo después. En este patrón, el cuerpo siempre se ejecuta al menos una vez, lo que coincide con el flujo natural de «preguntar y después validar».
-- Simulated input validation
local inputs = {-1, 0, 5} -- pretend user input
local idx = 0
local value
repeat
idx = idx + 1
value = inputs[idx]
print("Got: " .. value)
until value > 0
print("Valid value: " .. value) -- 5Las variables del bucle son locales
Las variables declaradas con local dentro del cuerpo de un bucle se vuelven a crear en cada iteración. Esto es importante al capturar variables del bucle en cierres: cada cierre captura su propia copia. Las variables declaradas fuera del bucle persisten entre iteraciones.
local callbacks = {}
for i = 1, 3 do
local captured = i -- local per iteration
callbacks[i] = function() return captured end
end
print(callbacks[1]()) -- 1
print(callbacks[2]()) -- 2
print(callbacks[3]()) -- 3Patrón acumulador
Un caso de uso habitual de los bucles while es acumular un resultado. La suma, el producto, la concatenación de cadenas y la construcción de tablas siguen el patrón acumulador: inicializar antes del bucle, actualizar dentro y utilizar el resultado después.
local numbers = {3, 1, 4, 1, 5, 9, 2, 6}
local sum = 0
local i = 1
while i <= #numbers do
sum = sum + numbers[i]
i = i + 1
end
print("Sum:", sum) -- 31
print("Avg:", sum / #numbers) -- 3.875Bucles anidados
Los bucles pueden anidarse. Cada bucle mantiene su propio contador. Utilice nombres de variables descriptivos para facilitar la comprensión. La instrucción break solo sale del bucle envolvente más interno; para salir de varios niveles, puede necesitar una variable de control o goto (Lua 5.2 o posterior).
local found = false
local target = 6
local i = 1
while i <= 3 and not found do
local j = 1
while j <= 3 do
if i * j == target then
print(i .. " * " .. j .. " = " .. target)
found = true
break
end
j = j + 1
end
i = i + 1
endgoto para salir de varios niveles
Lua 5.2 y posteriores introdujeron goto para saltar a una posición etiquetada. Aunque generalmente no se recomienda, es válido para salir limpiamente de bucles anidados sin una variable de control. Las etiquetas se definen con ::name::.
for i = 1, 5 do
for j = 1, 5 do
-- goto only valid approach for nested break in Lua
if i * j > 10 then
goto done
end
io.write(i*j .. " ")
end
end
::done::
print()
print("Stopped early")Ventajas y desventajas de while y repeat
while: utilícelo cuando pueda necesitar cero iteraciones; la condición se comprueba primero. repeat-until: utilícelo cuando necesite al menos una iteración; la comprobación se realiza después. Prefiera while para la mayoría de los bucles. Utilice repeat-until para menús, solicitudes y bucles de reintento en los que la acción deba realizarse antes de la comprobación.
-- while: may execute zero times
local ready = false
while ready do
print("never prints")
end
-- repeat-until: always executes at least once
local done = false
repeat
print("runs once even though done=false")
done = true
until doneComprobación rápida
¿Cuándo se comprueba la condición en un bucle repeat...until?
Resumen: while y repeat-until
Puntos clave:
while cond do ... end: comprueba antes; puede no ejecutarserepeat ... until cond: comprueba después; se ejecuta al menos una vezbreaksale del bucle más internogoto ::label::puede salir de bucles anidados (Lua 5.2 o posterior)- Las variables locales del bucle se vuelven a crear en cada iteración
- Utilice el patrón acumulador para construir resultados
Preguntas frecuentes
¿La lección «Bucles while y repeat-until» es gratis?
Sí — el texto completo de «Bucles while y repeat-until» 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 «Bucles while y repeat-until»?
Utilice while y repeat-until para realizar iteraciones controladas por condiciones. 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 «Bucles while y repeat-until»?
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