if und unless
geben als Resultat den letzten Wert in dem
jeweils ausgeführten Zweig zurück. Fehlt der
optionale else-Teil, so ergibt eine falsche
Bedingung bei if bzw. eine wahre Bedingung
bei unless als Wert der Anweisung nil.
if Bedingung unless Bedingung # Bed. wahr # Bed. falsch else else # Bed. falsch # Bed. wahr end end
Verkettungen mit elsif sind möglich.
if Bedingung1 # Bed. 1 wahr elsif Bedingung2 # Bed. 2 wahr else # Bed. 2 falsch end
Eine Alternativform, die in einer Zeile stehen kann, verwendet
das reservierte Wort then:
if Bedingung then Wahr else Falsch end unless Bedingung then Falsch else Wahr end
Ein interessanter Aspekt ist, dass diese Anweisungen auch an Stelle eines Ausdrucks stehen können. Die aus der Sprache C bekannt Kurzform ist ebenfalls vorhanden.
a = 0 #-> 0 a = (if a == 0 then 1 else 0 end) #-> 1 a = (if a == 0 then 1 else 0 end) #-> 0 a = (a == 0) ? 1 : 0 #-> 1 a = (a == 0) ? 1 : 0 #-> 0
Gelegentlich ist es sinnvoll, die Bedingungen, unter denen eine Anweisung ausgeführt wird, etwas in den Hintergrund zu stellen. Damit werden die Aktionen deutlicher sichtbar, allerdings sind die Voraussetzungen für ihr Eintreten optisch schwerer zu erkennen.
a = 1 #-> 1
a = 10 if a < 5 #-> 10
a = 5 unless a % 2 == 0 #-> nil
a #-> 10
# oder
raise FatalError unless File.exist?('config.xml')
Hinter den Kulissen wandelt Ruby unless in if not
um und erzeugt aus den Modifikatorausdrücken gewöhnliche Anweisungen.
Dies erklärt das nil-Resultat im Beispiel, da der
unless-Modifikator keinen Alternativzweig enthalten kann.