====== Kontrollstrukturen und logische Operatoren ======
Mithilfe der [[user:madshadow:lua:programming:for-loop| for-Schleife]] lässt sich also ein Anweisungsblock eine feste Anzahl oft wiederholen. Wir können 3 Äpfel essen, 5 Äpfel oder 7 Äpfel. Was jedoch, wenn wir essen wollen bis wir satt sind, aber nicht wissen wieviel wir dafür essen müssen?
==== Die while-Schleife ====
Mithilfe der while-Schleife ist es uns möglich, eine bestimmte Aktion **solange** zu wiederholen **bis** eine von uns gestellte Bedingung erfüllt ist. Konkret können wir also Äpfel essen bis wir satt sind.
while Bedingung do
-- Anweisungen
end
Für unser Beispiel:
while HabeIchHunger() do
EsseEinenApfel()
end
Die while-Schleife beginnt damit, unsere Bedingung zu prüfen. HabeIchHunger? Wenn die Antwort auf diese Frage **Nein** ist, die Funktion HabeIchHunger() also **false** zurück gibt, dann wird unser Anweisungsblock übersprungen und wir essen keinen Apfel. Wenn unsere Funktion HabenWirHunger() jedoch **true** zurückgibt, gleichbedeutend mit //Ja, ich habe Hunger!//, dann wird der Anweisungsblock ausgeführt und wir essen einen Apfel. Im Anschluss wird die Bedingung erneut geprüft: //Habe ich (noch) Hunger?// und gegebenenfalls der Anweisungsblock ausgeführt. Das geschieht bis die Bedingung HabeIchHunger nicht mehr erfüllt (**false**) ist.
Angenommen wir einigen uns darauf, dass wir 9 Äpfel essen müssen um satt zu sein, könnte unser Beispiel so aussehen:
-- Die Anzahl an Äpfel die wir gegessen haben
-- Notiz: wir nehmen ae um den Umlaut Ä zu vermeiden
anzahlAepfel = 0
-- Wir definieren eine Funktion mit dem Namen HabeIchHunger
function HabeIchHunger()
-- Ist die Anzahl an Äpfel die wir gegessen haben gleich 9?
if anzahlAepfel == 9 then
-- Ja, wir haben 9 Äpfel gegessen und haben keinen Hunger mehr
-- Die Antwort auf HabeIchHunger ist demnach false
return false
end
-- Wir haben noch Hunger und beantworten unsere Frage mit Ja (true)
return true
end
function EsseEinenApfel()
-- Die Anzahl gegessener Äpfel wird erhöht
anzahlAepfel = anzahlAepfel + 1
end
-- solange HabeIchHunger() true liefert, essen wir munter Äpfel
while HabeIchHunger() do
EsseEinenApfel()
end
-- Wir geben bekannt dass wir satt sind
print "Ich bin satt!"
Natürlich ließe sich auch eine for-Schleife verwenden um die 9 Äpfel zu essen, aber wie gehen davon aus das es sich um eine Person handelt, die nur hinspüren kann ob sie Hunger hat und nicht weiss wieviele Äpfel noch gegessen werden müssen bis sie satt ist.