Ruby kennt sogenannte Ausdrücke zur Ablaufsteuerung. Mit ihnen legst du fest, wie das Programm abläuft, und sie nehmen einen truthy- oder falsey-Wert an. Es gibt Operatoren, mit denen du truthy- oder falsey-Werte erzeugen kannst. Man nennt sie Vergleichsoperatoren.
Es gibt zwei wichtige Steuerausdrücke, mit denen du festlegst, welcher Code ausgeführt wird und welcher nicht. Anders ausgedrückt: welcher Zweig ausgeführt wird.
Das sind if und der unless-Ausdruck.
Mit Vergleichsoperatoren vergleichst du Werte und erhältst einen true- oder false-Wert.
Die folgenden Operatoren erwarten zwei Werte desselben Typs zum Vergleich.
Haben die Werte nicht denselben Typ, gibt der Compiler einen Fehler aus.
Hier ist eine Liste der Operatoren und ein Beispiel, wann sie einen true-Wert liefern:
| Methode | Beschreibung | Beispiel |
|---|---|---|
| < | kleiner als | 4 < 5 |
| <= | kleiner als oder gleich | 4 <= 4 |
| > | größer als | 3 > 1 |
| >= | größer als oder gleich | 2 >= 2 |
Die Gleichheits- und Ungleichheitsoperatoren kannst du im Gegensatz zu den bereits genannten Operatoren für jeden Wertetyp verwenden.
Mit dem Operator == prüfst du, ob zwei Werte gleich sind, und das schließt die Prüfung des Wertetyps ein.
Der Operator != funktioniert genauso, liefert aber true, wenn die Werte nicht gleich sind, und false, wenn sie gleich sind.
Hier ist eine Liste der Gleichheits- und Ungleichheitsoperatoren und ein Beispiel, wann sie einen true-Wert liefern:
| Methode | Beschreibung | Beispiel |
|---|---|---|
| == | gleich | 4 == 4 |
| != | nicht gleich | 5 != 4 |
Der kombinierte Vergleichsoperator (manchmal auch Raumschiff-Operator genannt) ist ein besonderer Vergleichsoperator.
Er ist insofern besonders, als dass er keinen truthy- oder falsey-Wert, sondern eine Zahl zurückgibt.
Er wird als <=> geschrieben und vergleicht zwei Werte.
Er gibt 1 zurück, wenn der linke Wert größer als der rechte ist, -1, wenn der linke Wert kleiner als der rechte ist, und 0, wenn die Werte gleich sind.
1 <=> 2 # => -1
2 <=> 2 # => 0
3 <=> 2 # => 1
Mit der if-Anweisung prüfst du, ob eine gegebene Bedingung „truthy“ oder „falsey“ ist.
Ist die Bedingung truthy, wird der Code innerhalb der if-Anweisung ausgeführt.
Eine if-Anweisung endet mit dem Schlüsselwort end.
value = 1
if value == 1
"1 is equal to 1"
end
# => "1 is equal to 1"
if value > 2
"1 is greater than 2"
end
# => nil
Die unless-Anweisung funktioniert sehr ähnlich wie die if-Anweisung, führt den Code innerhalb der unless-Anweisung aber nur aus, wenn die Bedingung falsey ist.
value = 1
unless value == 1
"1 is not equal to 1"
end
# => nil
unless value > 2
"1 is not greater than 2"
end
# => "1 is not greater than 2"
Die else-Anweisung kannst du zusammen mit der if-Anweisung verwenden.
Die else-Anweisung wird ausgeführt, wenn der if-Zweig nicht ausgeführt wird.
value = 1
if value == 1
"1 is equal to 1"
else
"1 is not equal to 1"
end
# => "1 is equal to 1"
if value > 2
"1 is greater than 2"
else
"1 is not greater than 2"
end
# => "1 is not greater than 2"
Die elsif-Anweisung kannst du zusammen mit der if-Anweisung verwenden.
Die elsif-Anweisung wird ausgeführt, wenn der if-Zweig nicht ausgeführt wird und die Bedingung der elsif-Anweisung truthy ist.
Elsif-Anweisungen lassen sich aneinanderreihen, und die erste truthy Bedingung wird ausgeführt.
Am Ende der if-Anweisung kann außerdem eine else-Anweisung stehen, die ausgeführt wird, wenn keine der vorherigen Anweisungen zutraf.
value = 1
if value == 0
"1 is equal to 0"
elsif value > 2
"1 is greater than 2"
else
"1 is not equal to 0 and 1 is not greater than 2"
end
# => "1 is not equal to 0 and 1 is not greater than 2"
Die if- und unless-Anweisung kannst du auch als [Suffix][if-as-suffix] verwenden. Das ist praktisch, wenn du eine einzelne Codezeile nur dann ausführen willst, wenn eine Bedingung wahr ist. Dazu setzt du die if- oder unless-Anweisung hinter den Code, den du ausführen willst.
value = 1
"1 is equal to 1" if value == 1
# => 1 is equal to 1
"1 is not equal to 1" unless value == 1
# => nil