===== Verzweigungen ===== Verzweigungen erlauben dem Programm, abhängig von einer Bedingung unterschiedliche Instruktionen auszuführen. Eine solche Bedingung wird dabei immer als [[ scripting:tutorials:level1:variables#booleans | Boolean ]] ausgedrückt. Konstruiert werden Verzweigungen wie folgt: Das Schlüsselwort **if** leitet eine Verzweigung ein, danach folgt die zu prüfende Bedingung. Das Schlüsselwort **then** zeigt das Ende der Bedingung an. Anschließend gibt man alle Instruktionen an, die man ausführen will, sollte die Bedingnung **true** sein. Die Verzweigung endet mit dem Schlüsselwort **end**. -- Rechne 24h-Zeitdarstellung in 12h-Zeitdarstellung um und gib Uhrzeit als String aus Hours = 13 Minutes = 26 Seconds = 5 Period = "a.m." PostMeridiem = Hours > 12 if PostMeridiem then Hours = Hours - 12 Period = "p.m." end Time = Hours..":"..Minutes..":"..Seconds.." "..Period ---- **Hinweis**: Unsere Beispiele in diesem und den folgenden Kapiteln können besser nachvollzogen werden, wenn man die Programmzeilen nebenbei ausprobieren kann. Dazu kann man diese Webseite hier verwenden: [[ https://www.lua.org/demo.html ]] Um dabei bei der Ausgabe ein Ergebnis zu sehen, kann man ''print'' verwenden. Will man beispielsweise die Variable ''Time'' ansehen, kann man Time = Hours..":"..Minutes..":"..Seconds.." "..Period print(Time) schreiben. Wenn die Variable einen anderen Namen hat, muss man diesen dementsprechend austauschen. ---- Unser Beispiel kann noch etwas vereinfacht werden. Zunächst muss die Bedingung nicht zwangsläufig zuerst in einer Varable zwischengespeichert werden, wenn das Ergebnis nur für diese Verzweigung gebraucht wird. Darüber hinaus erlauben Verzweigungen auch, andere Instruktionen auszuführen, sollte die Bedingung nicht Wahr sein. Dazu benötigt man das Schlüsselwort **else**. -- Dieser Code ist komplett äquivalent zum ersten Beispiel oben Hours = 13 Minutes = 26 Seconds = 5 if Hours > 12 then Hours = Hours - 12 Period = "p.m." else Period = "a.m." end Time = Hours..":"..Minutes..":"..Seconds.." "..Period Die Verzweigungen in Lua sind sehr nah an natürlicher Sprache: "**Wenn** (Bedingung erfüllt) **dann** (Instruktionen) **sonst** (Instruktionen) **Ende**". \\ Wenn man sich seine Verzweigungen auf diese Art als Satz formuliert, kann man schnell prüfen, ob die Logik dahinter das ausdrückt, was man möchte. \\ Da Bedingungen immer Booleans sind, kann man alle logischen und Vergleichsoperatoren verwenden: -- Hier den Wochentag eintragen Weekday = "Monday" -- :( IsItWeekend = false if Weekday == "Saturday" or Weekday == "Sunday" then IsItWeekend = true -- :) end Man kann Verzweigungen auch ineinander schachteln: -- Finde aus drei verschiedenen Zahlen die kleinste: Number1 = 3 Number2 = 7 Number3 = 1 if Number1 < Number2 then if Number1 < Number3 then SmallestNumber = Number1 else SmallestNumber = Number3 end else if Number2 < Number3 then SmallestNumber = Number2 else SmallestNumber = Number3 end end Beachte dabei, wie **jede** Verzweigung mit **if** eingeleitet und mit **end** beendet werden muss. \\ Eine Besondere Rolle haben Verzweigungen wie diese hier: Difficulty = "normal" -- Schwierigkeitsgrad, der entweder "easy", "normal", "hard" oder "veryhard" ist if Difficulty == "easy" then NumberOfEnemyTroops = 4 else if Difficulty == "normal" then NumberOfEnemyTroops = 7 else if Difficulty == "hard" then NumberOfEnemyTroops = 11 else if Difficulty == "veryhard" then NumberOfEnemyTroops = 15 end end end end Kurzum, eine Variable, in unserem Fall der Schwierigkeitsgrad, kann nur einen von wenigen fest definierten Werten haben und wir wollen herausfinden, welcher das ist. Für so einen Fall erlaubt das Schlüsselwort **elseif** eine übersichtlichere Schreibweise: -- Dieser Code ist wieder äquivalent zu dem darüber Difficulty = "normal" if Difficulty == "easy" then NumberOfEnemyTroops = 4 elseif Difficulty == "normal" then NumberOfEnemyTroops = 7 elseif Difficulty == "hard" then NumberOfEnemyTroops = 11 elseif Difficulty == "veryhard" then NumberOfEnemyTroops = 15 end Sollte die Liste an möglichen Werten die Länge 4 deutlich überschreiten, gibt es weitaus elegantere Wege, so eine Abfrage zu formulieren. Darauf wollen wir allerdings erst später in [[ scripting:tutorials:level3:best_practices |Ebene 3]] eingehen. ---- Im nächsten Kapitel teilen wir den Code in wieder verwendbare, logische Blöcke auf. [[ scripting:tutorials:level1:variables | Voriges Kapitel: Variablen ]]\\ [[ scripting:tutorials:level1:functions_blocks | Nächstes Kapitel: Funktionen ]]\\ [[ scripting:tutorials:level1:branches | Zurück nach oben ]]