Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Schleifen
Schleifen werden dazu benutzt, einen bestimmten Teil eines Skripts wiederholt auszuführen. Ähnlich zu Verzweigungen wird der Inhalt einer Schleife so lange ausgeführt, wie eine bestimmte Bedingung zutrifft. Auch bei Schleifen wird diese Bedingung mittels eines Booleans ausgedrückt. Es gibt in Lua meherere Möglichkeiten, eine Schleife zu formulieren. Die wollen wir im Folgenden nacheinander durchgehen.
while-Schleife
Die while-Schleife ist die intuitivste der Schleifen in Lua. Als Satz formuliert setzt sie folgende Logik um:
„Solange eine bestimmte Bedingung erfüllt ist, führe den folgenden Block aus.“
Eine while-Schleife beginnt mit dem Schlüsselwort while
. Darauf folgt die Bedingung, die geprüft werden soll. Mit do
wird die Definition der Bedingung abgeschlossen und der auszuführende Block beginnt. end
schließt wie aus Verzweigungen oder Funktionen gewohnt die Schleife ab.
Dieses Prinzip zeigt das folgende einfache Beispiel:
MyNumber = 1 while MyNumber < 42 do MyNumber = MyNumber + 1 end
Als Satz formuliert: „Solange MyNumber kleiner als 42 ist, erhöhe MyNumber um 1.“
Die Schleifenbedingung kann dabei jeder mögliche Boolean sein, zum Beispiel auch das Ergebnis einer Funktion:
-- Dieser Code hat genau die gleiche Funktion wie unser Beispiel oben function IsNumberLargeEnough(_Number) return _Number >= 42 end MyNumber = 1 while not IsNumberLargeEnough(MyNumber) do MyNumber = MyNumber + 1 end
Die Bedingung, ob der Inhalt der Schleife ausgeführt werden soll, wird immer im Voraus geprüft. Das heißt, wenn im Beispiel oben MyNumber
zu Beginn mit 42 definiert wird, wird die Zahl kein einziges Mal um 1 erhöht werden.
Um die Möglichkeiten der while-Schleife besser zeigen zu können, wollen wir den Rest einer ganzzahligen Division berechnen. Diese Operation wird auch Modulo genannt. Ziel ist also für zwei Zahlen A und B herauszufinden, wie viel Rest beim Berechnen von A/B
übrig bleibt. Die Strategie unseres Algorithmus ist es, B so lange von A abzuziehen, bis B nicht mehr in A „passt“. Der Rest muss folglich der Rest der Division sein:
function Modulo(_A, _B) while _A > _B do _A = _A - _B end return _A end
Ein klassisches Beispiel für die Verwendung einer while-Schleife ist die Berechnung des größten gemeinsamen Teilers zweier Zahlen, sodass beispielsweise ein Bruch gekürzt werden kann. Dazu verwenden wir den Euklidischen Algorithmus:
function GreatestCommonDivisor(_A, _B) if _A == 0 then return _B else while _B ~= 0 do if _A > _B then _A = _A - _B else _B = _B - _A end end end return _A end
Wer Lust hat, kann sich auf der verlinkten Wikipediaseite anschauen, warum dieser Algorithmus funktioniert.
for-Schleife
Die for-Schleife wird dazu benutzt, den eingesetzten Code-Block für eine feste Anzahl an Wiederholungen auszuführen.