Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:tutorials:level1:loops

Dies ist eine alte Version des Dokuments!


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.


repeat-until-Schleife


Abgrenzung zu Funktionen

scripting/tutorials/level1/loops.1685184310.txt.gz · Zuletzt geändert: 2023/05/27 10:45 von fritz_98