====== Kontrollstrukturen und logische Operatoren ====== Kontrollstrukturen ermöglichen es uns den Programmablauf zu beeinflussen und zu steuern. Das lässt sich mithilfe eines Flussdiagrammes veranschaulichen. Mit Flussdiagrammen stellt man den Ablauf eines Programmes grafisch dar und verdeutlich sich somit seine Überlegungen. Dies kann deutlich zu besserer Übersicht und Verständnis beitragen. ==== Die bedingte Verzweigung ==== Beginnen wir mir der so genannten **if-Anweisung**. Mit einer if-Anweisung können Wir einen oder mehrere Fälle abfragen. Der Aufbau einer if-Anweisung sieht wie folgt aus: if (Bedingung) then -- Anweisungen end Wenn die Bedingung **true**(wahr) oder **einen gültigen Wert** enthält, dann wird der Anweisungsblock ausgeführt.\\ Wenn die Bedingung **false**(falsch) oder **nil**(nicht existent) enthält, dann wird der Anweisungsblock nicht ausgeführt. -- Beispiel 1: Die Bedingung der if-Abfrage ist true. Der Anweisungsblock wird ausgeführt. if true then -- Anweisungen end -- Gegenbeispiel: Die Bedingung der if-Abfrage ist false. Der Anweisungsblock wird nicht ausgeführt. if false then -- Anweisungen end -- Beispiel 2: Ein Vergleich mit "==". 2 ist gleich 2, also wahr -> true. if 2 == 2 then -- Anweisungen end -- Gegenbeispiel: Ein Vergleich mit "==". 2 ist gleich 3. Wir bedingen dass 2 gleich 3 sein muss. Das stimmt jedoch nicht, also gibt unsere Bedingung false(falsch) zurück. if 2 == 3 then -- Anweisungen end -- Beispiel 3: Eine gültige Variable. myVariable = 2 if myVariable then -- Anweisungen end -- Gegenbeispiel: Eine Ungültige Variable. Der Anweisungsblock wird in diesem Fall nicht ausgeführt. if myUndefinedVariable then -- Anweisungen end Falls unsere Bedingung also nicht efüllt ist(**false**,**nil**) lässt sich eine alternative Möglichkeit einbauen: myVariable = 2 if myVariable == 3 then -- Wenn unsere Variable gleich 3 ist, dann werden unsere Anweisungen ausgeführt. -- Anweisungen else -- Das stimmt aber nicht. Also werden mit else unsere alternativen Anweisungen ausgeführt. -- Alternative Anweisungen end Auf Deutsch lässt sich das in etwa so übersetzen: Wenn myVariable == 3 dann -- Anweisungen sonst -- Alternative Anweisungen Ende Das kleine Schlüsselwort **else** gibt uns also diese alternative Möglichkeit. Durch eine kleine Erweiterung können wir beliebig viele Fälle abfragen. Angenommen wir möchten das Ergebnis einer Zufallszahl abfragen. Dazu benötigen wir eine Funktion die uns eine Zufallszahl erzeugt. Auf Funktionen gehen wir später noch ein. Vorerst soll gesagt sein, das eine Zufallszahl zwischen 1 und 4 erzeugt wird. -- Eine Zufallszahl zwischen 1 und 4 erhalten wir hier: number = math.random(4) if number == 1 then -- Anweisungen zu Fall 1: Unsere Zufallszahl hat den Wert 1 elseif number == 2 then -- Anweisungen zu Fall 2: Unsere Zufallszahl hat den Wert 2 elseif number == 3 then -- Anweisung zu Fall 3 elseif number == 4 then -- Anweisung zu Fall 4 else -- Anweisung zu Fall 5: Es handelt sich bei "number" nicht um eine Zahl zwischen 1 bis 4. Ist uns ein Fehler unterlaufen? end Mit **elseif** können wir nun eine Bedinung an die andere reihen und so beliebig viele Fälle abfragen.