0Pricing
Lua Academy · Lektion

while- und repeat-until-Schleifen

Verwenden Sie while und repeat-until für bedingungsabhängige Iterationen

while- und repeat-until-Schleifen ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Die while-Schleife

Eine while-Schleife wiederholt ihren Körper, solange die Bedingung als wahr ausgewertet wird. Die Bedingung wird vor jeder Iteration geprüft. Ist die Bedingung bereits zu Beginn falsch, wird der Körper nie ausgeführt. Stellen Sie immer sicher, dass die Schleife sich dem Abbruchkriterium nähert, um Endlosschleifen zu vermeiden.

local count = 1

while count <= 5 do
  print(count)
  count = count + 1
end
-- prints 1 through 5

repeat-until-Schleife

Die repeat...until-Schleife entspricht in Lua einer Do-While-Schleife. Der Rumpf wird mindestens einmal ausgeführt, und die Bedingung wird nach jeder Iteration geprüft. Die Schleife endet, sobald die Bedingung wahr wird (im Gegensatz zu while). Variablen, die im Rumpf deklariert werden, sind in der Bedingung sichtbar.

local n = 1

repeat
  print(n)
  n = n * 2
until n > 100
-- prints: 1, 2, 4, 8, 16, 32, 64

Endlosschleifen mit break

Verwenden Sie while true do für Ereignisschleifen oder Wiederholungsversuche und kombinieren Sie es mit break, um die Schleife zu verlassen, sobald eine Bedingung erfüllt ist. Dieses Muster ist in Hauptschleifen von Spielen und dauerhaft laufenden Netzwerkservern üblich.

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

Countdown mit while

while-Schleifen eignen sich ebenso gut zum Herunterzählen. Entscheidend ist, die Variable so zu aktualisieren, dass die Abbruchbedingung schließlich erfüllt wird. Wenn der Zähler nicht aktualisiert wird, entstehen häufig Endlosschleifen.

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 zur Eingabevalidierung

Das repeat-until-Muster eignet sich ideal zur Eingabevalidierung: Fragen Sie einmal ab und prüfen Sie die Eingabe anschließend. In diesem Muster wird der Rumpf immer mindestens einmal ausgeführt, was dem natürlichen Ablauf „fragen, dann validieren“ entspricht.

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

Schleifenvariablen sind lokal

Variablen, die innerhalb des Schleifenrumpfs mit local deklariert werden, werden bei jeder Iteration neu erstellt. Das ist wichtig, wenn Sie Schleifenvariablen in Closures erfassen – jede Closure erfasst ihre eigene Kopie. Außerhalb der Schleife deklarierte Variablen bleiben über mehrere Iterationen hinweg erhalten.

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

Akkumulator-Muster

Ein häufiger Anwendungsfall von while-Schleifen ist das Aufsummieren eines Ergebnisses. Summe, Produkt, String-Verkettung und das Erstellen von Tabellen folgen alle dem Akkumulator-Muster: vor der Schleife initialisieren, innerhalb der Schleife aktualisieren und das Ergebnis danach verwenden.

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

Verschachtelte Schleifen

Schleifen können verschachtelt werden. Jede Schleife verwaltet ihren eigenen Zähler. Verwenden Sie aussagekräftige Variablennamen, um den Code verständlich zu halten. Die Anweisung break beendet nur die innerste umschließende Schleife – um mehrere Ebenen zu verlassen, benötigen Sie möglicherweise eine Flag-Variable oder goto (Lua 5.2+).

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 zum Verlassen mehrerer Ebenen

Lua 5.2+ führte goto ein, um zu einer markierten Position zu springen. Obwohl die Verwendung im Allgemeinen nicht empfohlen wird, ist sie eine geeignete Möglichkeit, verschachtelte Schleifen sauber ohne eine Flag-Variable zu verlassen. Marken werden mit ::name:: definiert.

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")

Abwägung zwischen while und repeat

while: Verwenden Sie dies, wenn null Iterationen möglich sein sollen – die Bedingung wird zuerst geprüft. repeat-until: Verwenden Sie dies, wenn mindestens eine Iteration erforderlich ist – die Prüfung erfolgt danach. Bevorzugen Sie für die meisten Schleifen while. Verwenden Sie repeat-until für Menüs, Eingabeaufforderungen und Wiederholungsversuche, bei denen die Aktion vor der Prüfung ausgeführt werden muss.

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

Kurztest

Wann wird die Bedingung in einer repeat...until-Schleife geprüft?

Zusammenfassung: while und repeat-until

Wichtige Punkte:

  • while cond do ... end – Prüfung vorher; wird möglicherweise überhaupt nicht ausgeführt
  • repeat ... until cond – Prüfung danach; wird mindestens einmal ausgeführt
  • break beendet die innerste Schleife
  • goto ::label:: kann verschachtelte Schleifen verlassen (Lua 5.2+)
  • Lokale Schleifenvariablen werden bei jeder Iteration neu erstellt
  • Verwenden Sie das Akkumulator-Muster, um Ergebnisse aufzubauen

Häufig gestellte Fragen

Ist die Lektion „while- und repeat-until-Schleifen“ kostenlos?

Ja — der vollständige Text von „while- und repeat-until-Schleifen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „while- und repeat-until-Schleifen“?

Verwenden Sie while und repeat-until für bedingungsabhängige Iterationen Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Lua Academy zu starten?

Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „while- und repeat-until-Schleifen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?

Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. if-, elseif- und else-Anweisungen
  2. while- und repeat-until-Schleifen
  3. Numerische for-Schleife
  4. Generische for-Schleife und break
← Zurück zu Lua Academy