next up previous contents index
Search Next: Mehrfachverzweigung Up: Kontrollstrukturen und Wertebereiche Previous: Kontrollstrukturen und Wertebereiche   Contents   Index


Einfache Verzweigungen

Die Anweisungen 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.


next up previous contents index
Search Next: Mehrfachverzweigung Up: Kontrollstrukturen und Wertebereiche Previous: Kontrollstrukturen und Wertebereiche   Contents   Index
(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20