Schleifen

Nachdem wir uns mit der Struktur des "if-Blocks" befasst haben, gehen wir nun über zu der so genannten Struktur der "Schleifen". Die Struktur der Schleifen kann untergliedert werden in die for-Schleife, die while-Schleife und die repeat-until-Schleife. Generell handelt es sich bei einer Schleife, im Englischen auch als "loop" bezeichnet, um eine elementare Struktur der Lua-Syntax, die ähnlich wie der if-Block aufgebaut ist. Allerdings können Schleifen mehr als nur einmal "durchlaufen" werden. Während die Fallunterscheidung in einem if-Block einmal statt findet und der Lua-Interpreter nach dessen Ausführung den nachfolgenden Code weiter interpretiert und ausführt, können Schleifen wiederholt werden. Je nach Bedingung kann der Lua-Interpreter nach der Ausführung der Schleife wieder zum Beginn der Schleife "zurückspringen" und die Schleife erneut "durchlaufen". Schleifen können dabei auch unendlich oft wiederholt werden, was von sehr großem Nutzen sein kann.

Die wohl elementarste Schleifenstruktur ist die while-Schleife:

mampfi = 1

while mampfi == 1 do print("es geht!") end

Wie für Variablen gibt es auch für Schleifen einige wichtige Operatoren. Man kann zwischen den folgenden Operatoren unterscheiden:

== ist der Vergleichsoperator und gibt einen gültigen Wahrheitswert zurück, falls die Variable mit dem Vergleichswert übereinstimmt

= ist der Operator für Größer-Gleich-Vergleiche und gibt einen gültigen Wahrheitswert zurück, falls die Variable größer oder gleich dem Vergleichswert ist <= ist der Operator für Kleiner-Gleich-Vergleiche und gibt einen gültigen Wahrheitswert zurück, falls die Variable kleiner oder gleich dem Vergleichswert ist ~= ist der Ungleichheitsoperator und gibt einen gültigen Wahrheitswert zurück, falls die Variable nicht mit dem Vergleichswert übereinstimmt not ist der Operator für die Existenzüberprüfung einer Varaible und gibt einen gültigen Wahrheitswert zurück, falls die Variable nicht existiert

Die Variable selbst als Bedingung gibt einen gültigen Wahrheitswert zurück, falls sie existiert. Die Vergleichswerte, also die Werte die rechts vom Operator stehen, können jeden Wert, wie er auch in einer Variablen gespeichert werden kann, annehmen.

Im obigen Beispiel wird eine neue Variable namens mampfi erstellt und ihr der Zahlenwert 1 zugewiesen. Die Nedingung der while-Schleife überprüft, ob mampfi wirklich den Wert 1 enthält. Ist das der Fall, wird der Codeblock, der sich innerhalb der Schleife befindet, ausgeführt. In diesem konkreten Fall wird nach der Ausführung die Schleife unendlich oft erneut ausgeführt, denn mampfi ändert seinen Wert nicht und die Bedingung bleibt unendlich lange wahr (mampfi ist gleich 1). Selbstverständlich kann man die Zeit der Durchläufe, beziehungsweise die Anzahl der Durchläufe selbst bestimmen:

mampfi = 1

while mampfi <= 10 do print("es geht!") mampfi = mampfi + 1 end

In diesem Fall erhält mampfi den Initialwert 1. Die Bedingung der while-Schleife prüft, ob der Wert von mampfi kleiner oder gleich 10 ist. Dies ist zu Beginn der Fall, daher wird der Inhalt der Schleife ausgeführt. Dabei wird der Text "es geht!" ausgegeben und die Variable mampfi um 1 erhöht. Daraufhin wird die Schleife noch neun weitere Male wiederholt, bis mampfi letztendlich den Wert 11 annimmt. Speziell für Fälle dieser Art mit begrenzter Anzahl an Ausführungen und einer kontinuierlichen Vergrößerung eines Varaiblenwerts wurde eine weitere Schleifenstruktur eingeführt: die for-Schleife.

for mampfi = 1,10 do
  print("es geht!")
end

Diese for-Schleife hat exakt das selbe Ergebnis zur Folge wie vorher die while-Schleife. Allerdings ist die Struktur der for-Schleife in diesem Fall um einiges übersichtlicher und einfacher. Im Gegensatz zur while-Schleife wird innerhalb der Bedingung der for-Schleife eine neue Variable mampfi mit dem Initialwert 1 eingeführt. Abgetrennt durch ein Komma folgt der Endwert 10. Während des Durchlaufs des Lua-Interpreters wird diese Variable selbstständig bis zum Endwert erhöht. Es hat sich allerdings eingebürgert, dass man anstatt mampfi die Variable mit dem Namen i verwendet; i steht dabei für Index. Selbstverständlich kann dort aber auch jede andere Namenskonvention stehen. Besonders zu beachten ist bei der for-Schleife, dass es nur einen einzigen Operator gibt, nämlich den Zuweisungsoperator, wie er ganz konventionell für Variablen gilt. In späteren Kapiteln werden die Vorteile der for-Schleife gegenüber der while-Schleife in einigen speziellen Fällen noch wesentlich deutlicher.

Die dritte und letzte Schleifenstruktur in Lua nennt sich "repeat-until"-Schleife. Diese Schleife lässt sich auch als Negierung der while-Schleife bezeichnen. Während die while-Schleife zuerst die Bedingung überprüft und anschließend den eingebetteten Code ausführt, wird die repeat-until-Schleife zuerst ausgeführt und dann die Bedingung überprüft. Ein Beispiel soll diesen elementaren Unterschied erklären:

mampfi = 30

repeat print (mampfi) mampfi = mampfi - 1 until mampfi <= 10

Für die repeat-until-Schleife sind dieselben Operatoren verfügbar wie auch für den if-Block und die while-Schleife. Obiges Beispiel gibt den Wert der Variablen mampfi aus, verringert ihren Wert um 1 und wiederholt diesen Vorgang, solange mampfi nicht den Wert kleiner oder gleich 10 annimmt.

Categories

Tags