Die Programmiersprache Ruby (German Edition)
hinzufügen.
else # Andernfalls ...
data = [x] # ... ein neues Array erstellen, das den Wert enthät.
end # Dies ist das Ende der Fallentscheidung.
5.1.1.2 elsif
Wenn Sie mit einer Fallentscheidung mehr als eine Bedingung prüfen möchten, können Sie eine oder mehrere
elsif
-Klauseln zwischen einem
if
und einem
else
hinzufügen.
elsif
ist eine Kurzform von »else if«. Beachten Sie, dass
elsif
nur ein e enthält. Eine Fallentscheidung, die
elsif
verwendet, sieht so aus:
if
Ausdruck1
Code1
elsif
Ausdruck2
Code2
.
.
.
elsif
AusdruckN
CodeN
else
Code
end
Wenn Ausdruck1 etwas anderes als
false
oder
nil
ergibt, wird Code1 ausgeführt. Andernfalls wird Ausdruck2 ausgewertet. Wenn dieser etwa anderes als
false
oder
nil
ist, wird Code2 ausgeführt. Dieser Vorgang geht weiter, bis ein Ausdruck etwas anderes als
false
oder
nil
ergibt oder alle
elsif
-Klauseln geprüft wurden. Wenn der mit der letzten
elsif
-Klausel verknüpfte Ausdruck
false
oder
nil
ist und auf die
elsif
-Klausel eine
else
-Klausel folgt, wird der Code zwischen
else
und
end
ausgeführt. Wenn keine
else
-Klausel vorhanden ist, dann wird überhaupt kein Code ausgeführt.
elsif
verhält sich wie
if
: Der Ausdruck muss durch einen Zeilenumbruch, ein Semikolon oder das Schlüsselwort
then
vom Code getrennt werden. Hier sehen Sie ein Beispiel für eine Mehrweg-Fallentscheidung mit
elsif
:
if x == 1
name = "eins"
elsif x == 2
name = "zwei"
elsif x == 3 then name = "drei"
elsif x == 4; name = "vier"
else
name = "viele"
end
5.1.1.3 Rückgabewert
In den meisten Sprachen ist die
if
-Fallentscheidung eine Anweisung. In Ruby dagegen ist alles ein Ausdruck, sogar die Kontrollstrukturen, die üblicherweise als Anweisungen bezeichnet werden. Der Rückgabewert einer
if
-»Anweisung« (d.h. der Wert, der aus der Auswertung eines
if
-Ausdrucks resultiert) ist der Wert des letzten Ausdrucks im Code, der ausgewertet wurde, oder
nil
, wenn kein Codeblock ausgeführt wurde.
Die Tatsache, dass if-Anweisungen einen Wert zurückgeben, bedeutet zum Beispiel, dass die oben gezeigte Fallenscheidung wie folgt eleganter geschrieben werden kann:
name = if x == 1 then "eins"
elsif x == 2 then "zwei"
elsif x == 3 then "drei"
elsif x == 4 then "vier"
else "viele"
end
5.1.2 if als Modifier
Wenn
if
in seiner normalen Anweisungsform geschrieben wird, verlangt Rubys Grammatik, dass es durch das Schlüsselwort
end
abgeschlossen wird. Für einfache, einzeilige Fallentscheidungen ist das etwas lästig. Das ist aber lediglich ein Parsing-Problem, und die Lösung besteht darin, das Schlüsselwort
if
selbst als Begrenzung zu verwenden, die den auszuführenden Code von dem Bedingungsausdruck trennt. Statt
if
Ausdruck
then
Code
end
können wir einfach schreiben:
Code
if
Ausdruck
Wenn
if
in dieser Form verwendet wird, nennt man es einen Anweisungs- (oder Ausdrucks) Modifier . Wenn Sie Perl-Programmierer sind, ist Ihnen diese Syntax wahrscheinlich geläufig, zum Beispiel:
puts message if message # message ausgeben, falls definiert
Diese Syntax verleiht dem auszuführenden Code mehr Gewicht und der Bedingung, unter der er ausgeführt wird, weniger. Die Verwendung dieser Syntax kann Ihren Code leichter lesbar machen, wenn die Bedingung trivial oder fast immer
true
ist.
Die Bedingung wird zwar zuletzt hingeschrieben, aber zuerst ausgewertet. Wenn sie etwas anderes als
false
oder
nil
ergibt, dann wird der Code ausgewertet, und sein Wert wird als Rückgabewert der modifizierten Anweisung verwendet. Andernfalls wird der Code nicht ausgeführt, und der Rückgabewert der modifizierten Anweisung ist
nil
. Verständlicherweise erlaubt diese Syntax keinerlei Art von
else
-Klausel.
Damit
if
als Modifier verwendet werden kann, muss es unmittelbar, ohne Zeilenumbruch dazwischen, auf die modifizierte Anweisung oder den modifizierten Ausdruck folgen. Das Einfügen eines Zeilenumbruchs in das vorige Beispiel wandelt es in einen unmodifizierten Methodenaufruf um, dem eine unvollständige
if
-Anweisung folgt:
puts message # Bedingungslos
if message # Unvollständig!
Der Modifier
if
hat einen sehr niedrigen Rang und bindet weniger stark als der Wertzuweisungsoperator. Stellen Sie aber sicher, dass Sie wissen, welchen Ausdruck Sie modifizieren, wenn Sie ihn verwenden. Die folgenden beiden Codezeilen sind beispielsweise unterschiedlich:
y = x.invert if x.respond_to? :invert
y = (x.invert if x.respond_to? :invert)
In der ersten Zeile bezieht sich der Modifier auf den Wertzuweisungsausdruck.
Weitere Kostenlose Bücher