Ruby/Bedingungen
Syntax
Schlüsselwörter
Inhaltsverzeichnis
Bedingungen
Eine Bedingung stellt eine Verzweigung im Programmfluss dar. Sie führt Code in Abhängigkeit eines booleschen Ausdrucks bzw. Wertes aus. Sie ist das äquivalent des Conditional Branchs im RPG Maker XP.
If
Die am häufigsten eingesetzte Bedingung ist die if-Bedingung. Sie beginnt mit dem Schlüsselwort if. Anschließend kommt ein Ausdruck. Danach folgt optional ein then. Wurde das then gesetzt, kann der nachfolgende Code in die selbe Zeile geschrieben werden, andernfalls muss ein Zeilenumbruch erfolgen. Der Code zwischen dem then und dem end wird nur ausgeführt, wenn der Ausdruck einen wahren Wert, dass heißt ein anderer Wert als nil oder false, zurückliefert. Im klassischen Fall gibt der Ausdruck entweder true oder false zurück (in dem Fall spricht man von einem bool'schen Ausdruck). Der If-Verzweigung wird dann für den Wert true ausgeführt, für den Wert false hingegen nicht.
# Ziehe ein Los a = rand(10) # a ist eine Zufallszahl von 0 bis 9 if a < 6 then print "Ihr habt eine Niete gezogen!" end
In diesem Beispielcode wird eine Variable a auf einen zufälligen Wert von 0 bis 9 gesetzt. Danach erfolgt eine if-Bedingung. Ist der Wert a kleiner als 6, so wird das Innere der if-Bedingung ausgeführt und der Text "Ihr habt eine Niete gezogen" auf den Bildschirm geschrieben.
Else
Weiterhin ist es möglich einen else Fall, zu Deutsch "Ansonsten Fall", hinzuzufügen. Der Code des else-Falls wird ausgeführt, wenn die Bedingung einen unwahren Wert zurückliefert, also entweder false oder nil.
# Ziehe ein Los a = rand(10) # a ist eine Zufallszahl von 0 bis 9 if a < 6 then print "Ihr habt eine Niete gezogen!" else print "Ihr habt etwas Geld gewonnen" end
Wenn also < größer oder gleich 6 ist, hat der Spieler ein Los mit einem Geldgewinn gezogen.
Elsif
Will man mehrere Fälle abfragen, so kann man auch elsif Fälle vor dem else Fall setzen.
# Ziehe ein Los a = rand(10) # a ist eine Zufallszahl von 0 bis 9 if a < 6 then print "Ihr habt eine Niete gezogen!" elsif a < 8 then print "Ihr habt etwas Geld gewonnen" elsif a == 8 then print "Ihr habt eine große Summe Geld gewonnen!" else print "Ihr habt den Jackpot geknackt!" end
Die einzelnen Fälle werden nacheinander geprüft, bis zum ersten Fall, der eintritt. Dessen Code wird ausgeführt und die if-Verzweigung danach verlassen. Im obigen Falle hieße das, dass zuerst geprüft wird ob a kleiner als 6 ist. Ist dies der Fall, so wird eine Niete gezogen und die if-Verzweigung verlassen. Andernfalls wird der zweite Fall geprüft: ist a kleiner 8, so wird eine kleine Geldsumme gewonnen und die if-Verzweigung verlassen. Andernfalls wird geprüft ob a gleich 8 ist. In diesem Falle wird eine große Geldsumme gewonnen. Tritt dies aber auch nicht ein (was nur bei 9 der Fall ist), wird der else-Fall ausgeführt und der Jackpot geknackt.
Sowohl else als auch elsif Fälle sind optional. Eine if-Bedingung kann sie weglassen. Man kann auch if-Bedingungen schreiben die elsif-Fälle haben, aber keinen else-Fall, oder andersherum.
Will man nur eine einzelne Anweisung in eine if-Verzweigung schreiben und keine weiteren elsif- oder else-Fälle abfragen, so kann man das if hinter die Anweisung schreiben und auf das then und end verzichten.
# werfe eine Münze a = rand(2) print "Du hast Kopf geworfen" if a == 0 print "Du hast Zahl geworfen" if a == 1
Weiterhin liefert eine bedingte Anweisung - wie nahezu alles in Ruby - einen Rückgabewert. Man kann damit beispielsweise Werte auf zweierlei Arten zuweisen:
# Die gewöhnliche Variante: a if (cond1) a = 7 elsif (cond2) a = 4 else a = 3 end # Alternative über den Rückgabewert der Bedingung: a = if (cond1) then 7 elsif (cond2) then 4 else 3 end # Dies lässt sich natürlich auch mehrzeilig schreiben.
Ternärer Operator
Der ternäre Operator ist nur eine andere Schreibweise für eine if-else-Bedingung. Er lässt sich kürzer schreiben, hat aber den Nachteil, dass bei ihm ein else-Fall Pflicht ist und keine elsif-Fälle gesetzt werden dürfen. Weiterhin darf der Code im Inneren der Bedingung jeweils nur eine Anweisung umfassen.
Der ternäre Operator beginnt mit der Bedingung. Danach folgt ein ? sowie die Anweisung, die ausgeführt werden soll, wenn die Bedingung als erfüllt gilt. Danach folgt ein : sowie die Anweisung für eine nichterfüllte Bedingung.
cond ? true_val : false_val
Der Ternäre Operator wird standardmäßig nur verwendet, wenn man z.B. innerhalb einer Formel oder eines anderen Ausdrucks eine Verzweigung eine Fallunterscheidung einbauen will.
# gibt den Betrag (also eine positive Zahl) zurück def betrag n n >= 0 ? n : -n end
unless
Die unless-Bedingung führt einen Code nur aus, wenn der boolsche Ausdruck einen unwahren Wert liefert. Sie ist sozusagen das Gegenteil einer if-Bedingung. Im Gegensatz zu einer if-Bedingung darf eine unless-Bedingung keine else- und elsif-Fälle haben. Die unless-Bedingung sieht syntaktisch genauso wie die if-Bedingung aus, nur dass das Schlüsselwort unless statt if verwendet wird. Ebenfalls darf man eine unless-Bedingung ans Ende einer Anweisung setzen.
# wenn nicht gilt: a == nil unless a == nil then print "a ist nicht nil" end # ist dasselbe wie if not (a == nil) then print "a ist nicht nil" end # oder print "a ist nicht nil" unless a == nil