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.