Der else-Zweig
Eine if-Anweisung führt ihren Block nur aus, wenn die Bedingung wahr ist. Oft willst du auch etwas tun, wenn sie falsch ist. Dafür ist else („sonst“) da:
local wetter = "bewölkt"
if wetter == "regnerisch" then
print("Der Regen gießt das Feld")
else
print("Emma gießt das Feld")
endDas gibt Folgendes aus:
Emma gießt das FeldDie Bedingung ist falsch, also überspringt das Programm den ersten Block und führt den Block nach else aus. Die beiden Blöcke heißen Zweige: Wie ein Weg, der sich teilt, nimmt das Programm immer genau einen davon. Es führt nie beide aus, und es überspringt nie beide.
else steht in einer eigenen Zeile, eingerückt wie sein if, und die ganze Anweisung endet weiterhin mit einem einzigen end. else hat keine Bedingung und kein then: Es nimmt jeden Fall, den das if nicht genommen hat. Wenn du ihm trotzdem eine Bedingung gibst, wie in else wetter ~= "regnerisch" then, meldet Lua syntax error near '~='.
Zweige geben einer Variablen oft ihren Wert. Erzeuge die Variable vor dem if und ändere sie in den Zweigen nur noch:
local wetter = "sonnig"
local eimer
if wetter == "sonnig" then
eimer = 12
else
eimer = 4
end
print("Eimer Wasser: " .. eimer)Das gibt Folgendes aus:
Eimer Wasser: 12local eimer ohne Wert erzeugt die Variable mit dem Wert nil, und einer der Zweige speichert dann eine Zahl darin. Schreibe in den Zweigen nicht noch einmal local. Eine Variable, die du in einem Block mit local erzeugst, existiert nur bis zum Ende dieses Blocks:
local wetter = "sonnig"
if wetter == "sonnig" then
local eimer = 12
end
print("Eimer Wasser: " .. eimer)main.lua:5: attempt to concatenate a nil value (global 'eimer')Nach end ist das eimer aus dem Block weg. Lua sucht dann nach einer globalen Variablen namens eimer, findet keine und bekommt nil, genau wie bei einem Tippfehler in einem Namen.
So schreibst du es:
Anweisungen
- 1
Führe das Programm aus: Es gibt das Wetter aus und endet dann mit einem Fehler, weil
eimernilbleibt, wenn es nicht sonnig ist. Füge einenelse-Zweig hinzu, dereimerauf4setzt. Das Programm gibt dann Folgendes aus:Wetter: regnerisch Eimer Wasser: 4 - 2
Ändere
wetterin"sonnig"und führe das Programm erneut aus. Jetzt ist die Bedingung wahr, das Programm nimmt also den ersten Zweig und gibt Folgendes aus:Wetter: sonnig Eimer Wasser: 12