Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
Falls keine
when
-Klausel
true
ist und es eine
else
-Klausel gibt, wird der Code zwischen
else
und
end
ausgeführt. Der Wert des zuletzt in diesem Code ausgewerteten Ausdrucks wird zum Wert der
case
-Anweisung. Falls keine
when
-Klausel
true
ist und es keine
else
-Klausel gibt, wird kein Code ausgeführt, und der Wert der
case
-Anweisung ist
nil
.
    Mit einer
when
-Klausel innerhalb einer
case
-Anweisung kann mehr als ein Ausdruck verknüpft sein (jeweils durch Komma getrennt). Wenn einer dieser Ausdrücke
true
ergibt, dann wird der mit diesem
when
verknüpfte Code ausgeführt. In dieser einfachen Form der
case
-Anweisung sind die Kommata nicht sonderlich nützlich, sondern funktionieren einfach wie der Operator ||:
case
when x == 1, y == 0 then "x ist eins oder y ist null" # Obskure Syntax
when x == 2 || y == 1 then "x ist zwei oder y ist eins" # Verständlicher
end
    Alle
case
-Beispiele, die wir bisher gesehen haben, demonstrieren die einfachere, seltenere Form der Anweisung. In Wirklichkeit ist
case
mächtiger. Beachten Sie, dass die linke Seite jedes
when
-Klausel-Ausdrucks in den meisten Beispielen gleich ist. In der gängigen Form von
case
faktorieren wir diesen wiederholten linken Ausdruck aus der
when
-Klausel heraus und verknüpfen ihn mit dem
case
selbst:
name = case x
     when 1 # Nur der Wert, der mit x verglichen wird
     "eins"
     when 2 then "zwei" # Schlüsselwort then statt Zeilenumbruch
     when 3; "drei" # Semikolon statt Zeilenumbruch
     else "viele" # Optionale else-Klausel am Ende
     end
    In dieser Form der
case
-Anweisung wird der mit dem
case
verknüpfte Ausdruck einmal ausgewertet und dann mit den Werten verglichen, die sich aus der Auswertung des
when
-Ausdrucks ergeben. Die Vergleiche werden in der Reihenfolge durchgeführt, in der die
when
-Klauseln geschrieben werden, und der Code, der mit dem ersten passenden
when
verknüpft ist, wird ausgeführt. Der Rückgabewert dieser Form der
case
-Anweisung entspricht dem Rückgabewert der einfacheren Form: Der Wert des zuletzt ausgewerteten Ausdrucks oder
nil
, wenn kein
when
oder
else
(falls vorhanden) zutrifft.
    Das Wichtigste, was es an der
case
-Anweisung zu verstehen gibt, ist die Art und Weise, wie die Werte der
when
-Klauseln mit dem Ausdruck verglichen werden, der auf das Schlüsselwort
case
folgt. Dieser Vergleich geschieht mithilfe des Operators
===
. Dieser Operator wird mit dem Wert des
when
-Ausdrucks aufgerufen, und ihm wird der Wert des
case
-Ausdrucks übergeben. Daher ist die obige
case
-Anweisung äquivalent zur folgenden (außer, dass das
x
im obigen Code nur einmal ausgewertet wird):
name = case
     when 1 === x then "eins"
     when 2 === x then "zwei"
     when 3 === x then "drei"
     else "viele"
     end
    ===
ist der case-Gleichheitsoperator . Bei vielen Klassen – wie der weiter oben verwendeten Klasse
Fixnum
– verhält sich der Operator
===
genau wie
==
. Aber bestimmte Klassen definieren diesen Operator auf interessante Weise. Die Klasse
Class
definiert
===
so, dass geprüft wird, ob der rechte Operand eine Instanz der Klasse ist, die durch den linken Operanden angegeben wird.
Range
definiert diesen Operator so, dass er überprüft, ob der Wert auf der rechten Seite in dem Bereich auf der linken liegt.
Regexp
definiert ihn so, dass er prüft, ob der Wert auf der rechten Seite dem Muster auf der linken entspricht. In Ruby 1.9 definiert
Symbol ===
so, dass auf Symbol- oder String-Gleichheit geprüft wird. Mit diesen Definitionen für
case
-Gleichheit sind wir in der Lage, interessante
case
-Anweisungen wie die folgende zu schreiben:
# Je nach Klasse von x unterschiedliche Aktionen durchführen
puts case x
     when String then "String"
     when Numeric then "Zahl"
     when TrueClass, FalseClass then "Boolean"
     else "Sonstiges"
     end

# US-Einkommensteuer 2006 mit case und Range-Objekten berechnen
tax = case income
     when 0..7550
     income * 0.1
     when 7550..30650
     755 + (income-7550)*0.15
     when 30650..74200
     4220 + (income-30655)*0.25
     when 74200..154800
     15107.5 + (income-74201)*0.28
     when 154800..336550
     37675.5 + (income-154800)*0.33
     else
     97653 + (income-336550)*0.35
     end

# Benutzereingaben erhalten und verarbeiten, dabei Kommentare
# ignorieren und beenden, wenn der User das Wort "quit" eingibt
while line=gets.chomp do # Schleife, die den Benutzer jedes Mal zum Input auffordert
case line
when /^\s*#/ # Wenn Eingabe wie Kommentar aussieht ...
     next # ... mit der nächsten Zeile weitermachen
when /^quit$/i # Bei Eingabe "quit"

Weitere Kostenlose Bücher