Die if-Anweisung
Bisher haben deine Programme jede Zeile nacheinander von oben nach unten ausgeführt. Aber oft muss ein Programm entscheiden, was es tut: das Feld nur gießen, wenn es nicht geregnet hat, oder die Eier nur dann zum Markt bringen, wenn es genug davon gibt. Menschen entscheiden ständig so: Wenn es regnet, nehme ich einen Regenschirm mit.
In Lua schreibst du eine Entscheidung mit der if-Anweisung:
local eier = 14
if eier > 12 then
print("Genug Eier für den Markt")
end
print("Eier im Korb: " .. eier)Das gibt Folgendes aus:
Genug Eier für den Markt
Eier im Korb: 14Die if-Anweisung hat diese Teile:
- das Schlüsselwort
if. Ein Schlüsselwort ist ein Wort mit besonderer Bedeutung in Lua, du kannst es also nicht als Namen einer Variablen verwenden; - eine Bedingung:
eier > 12. Eine Bedingung ist eine Frage, die sich nur mit Ja (wahr) oder Nein (falsch) beantworten lässt: Sind es mehr als 12 Eier? - das Schlüsselwort
then, das die Bedingung abschließt; - ein Codeblock: die Zeilen zwischen
thenundend. Der Block läuft nur, wenn die Bedingung wahr ist; - das Schlüsselwort
end, das den Block und die ganzeif-Anweisung beendet.
Nach end geht das Programm normal weiter, deshalb wird Eier im Korb: 14 in jedem Fall ausgegeben. Wäre eier gleich 8, wäre die Bedingung falsch: Das Programm würde den Block überspringen und nur Eier im Korb: 8 ausgeben.
In einer Bedingung kannst du wie in der Mathematik mit > (größer als) und < (kleiner als) vergleichen. Die anderen Vergleiche lernst du in der nächsten Übung kennen.
Die Zeilen des Blocks sind eingerückt: Sie beginnen mit 4 Leerzeichen. Lua braucht das nicht, weil then und end bestimmen, was zum Block gehört. Die Einrückung ist für Menschen: Sie zeigt auf einen Blick, welche Zeilen nur manchmal laufen, benutze sie also immer. Die Tab-Taste fügt 4 Leerzeichen ein, und wenn du die Eingabetaste drückst, übernimmt die neue Zeile die Einrückung der Zeile darüber; vor end löschst du sie.
Die häufigsten Fehler sind ein fehlendes then und ein fehlendes end. Lua findet beide, bevor es irgendetwas ausführt, das Programm gibt also nichts aus:
local eier = 14
if eier > 12
print("Genug Eier für den Markt")
endmain.lua:3: 'then' expected near 'print'Der Fehler verweist auf Zeile 3, weil Lua erst merkt, dass then fehlt, wenn es zu print kommt. Ohne end kommt Lua am Ende des Programms an, bei <eof> („end of file“, Dateiende), und sagt dir, welches if nicht geschlossen ist:
local eier = 14
if eier > 12 then
print("Genug Eier für den Markt")
print("Eier im Korb: " .. eier)main.lua:4: 'end' expected (to close 'if' at line 2) near <eof>So schreibst du es:
Anweisungen
- 1
Schreibe unter die letzte Zeile eine
if-Anweisung mit der Bedingungwasser > 20. Gib in ihrem BlockEmma kann das ganze Feld gießenaus. Das Programm gibt Folgendes aus:Wasser im Brunnen: 30 Eimer Emma kann das ganze Feld gießen - 2
Schreibe unter ihr
endeine zweiteif-Anweisung mit der Bedingungwasser < 10, dieDer Brunnen ist fast leerausgibt. Führe das Programm aus: Es gibt immer noch nur zwei Zeilen aus, weil 30 nicht kleiner als 10 ist und der zweite Block deshalb übersprungen wird. - 3
Ändere
wasserin5und führe das Programm aus. Jetzt ist die erste Bedingung falsch und die zweite wahr, das Programm gibt also Folgendes aus:Wasser im Brunnen: 5 Eimer Der Brunnen ist fast leer