0Pricing
Lua Academy · Lección

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 5

Bucle 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, 64

Bucles 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
end

Cuenta 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 1

repeat-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)  -- 5

Las 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]())  -- 3

Patró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.875

Bucles 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
end

goto 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 done

Comprobació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 ejecutarse
  • repeat ... until cond: comprueba después; se ejecuta al menos una vez
  • break sale del bucle más interno
  • goto ::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

  1. Sentencias if, elseif y else
  2. Bucles while y repeat-until
  3. Bucle for numérico
  4. for genérico y break
← Volver a Lua Academy