Die Programmiersprache Ruby (German Edition)
wird:
print(x.to_s) if x
[ 16 ] Anmerkung des Übersetzers: »kippen« und »klappen« sind natürlich nur ungenaue Übersetzungen der Verben »to flip« und »to flop«, die im Original zur Verdeutlichung des Namens verwendet wurden.
[ 17 ]
..
erzeugt ein Flip-Flop im awk -Stil,
...
eines im sed -Stil.
Kapitel 5. Anweisungen und Kontrollstrukturen
Betrachten Sie das folgende Ruby-Programm. Es addiert zwei Zahlen, die ihm auf der Kommandozeile übergeben werden, und gibt die Summe aus:
x = ARGV[0].to_f # Erstes Argument in eine Zahl konvertieren
y = ARGV[1].to_f # Zweites Argument in eine Zahl konvertieren
sum = x + y # Argumente addieren
puts sum # Die Summe ausgeben
Dies ist ein einfaches Programm, das vor allem aus Variablenzuweisungen und Methodenaufrufen besteht. Was es besonders einfach macht, ist seine rein sequenzielle Ausführung. Die vier Codezeilen werden nacheinander ohne Verzweigung oder Wiederholung ausgeführt. Es kommt selten vor, dass ein Programm so einfach ist. Dieses Kapitel stellt Rubys Kontrollstrukturen vor, die die sequenzielle Ausführung oder den Steuerungsablauf (englisch flow-of-control ) eines Programms verändern. Wir behandeln
Fallentscheidungen
Schleifen
Iteratoren und Blöcke
den Ablauf ändernde Anweisungen wie
return
und
break
Ausnahmen
die besonderen Anweisungen BEGIN und END
die esoterischen Kontrollstrukturen, die man Fiber und Continuations nennt
5.1 Fallentscheidungen
Die gängigste Kontrollstruktur in jeder Programmiersprache ist die Fallentscheidung (englisch conditional ). Sie ist eine Möglichkeit, den Computer anzuweisen, bestimmten Code bedingt auszuführen, ihn also nur dann auszuführen, wenn irgendeine Bedingung zutrifft. Die Bedingung ist ein Ausdruck – wenn er irgendeinen anderen Wert als
false
oder
nil
ergibt, dann trifft die Bedingung zu.
Ruby besitzt ein reichhaltiges Vokabular, um Fallentscheidungen auszudrücken. Die Syntax-Auswahlmöglichkeiten werden in den nachfolgenden Unterabschnitten beschrieben. Beim Schreiben von Ruby-Code können Sie diejenige Syntax wählen, die für die anstehende Aufgabe am elegantesten erscheint.
5.1.1 if
Die eingängigste aller Fallentscheidungen ist
if
. In ihrer einfachsten Form sieht sie so aus:
if
Ausdruck
Code
end
Der Code zwischen
if
und
end
wird nur dann ausgeführt, wenn der Ausdruck etwas anderes als
false
oder
nil
gibt. Der Code muss durch einen Zeilenumbruch, ein Semikolon oder das Schlüsselwort
then
[ 18 ] vom Ausdruck getrennt werden. Im Folgenden sehen Sie zwei Möglichkeiten, dieselbe einfache Fallentscheidung zu schreiben:
# Wenn x kleiner als 10 ist, inkrementieren
if x < 10 # Zeilenumbruchtrenner
x += 1
end
if x < 10 then x += 1 end # then-Trenner
Sie können
then
auch als Trenn-Token verwenden und einen Zeilenumbruch dahinter setzen. Diese Vorgehensweise macht Ihren Code robust; er funktioniert selbst dann, wenn der Zeilenumbruch später entfernt wird:
if x < 10 then
x += 1
end
Programmierer, die an C gewöhnt sind oder an Sprachen, deren Syntax von C abgeleitet ist, sollten zwei wichtige Dinge bezüglich Rubys
if
-Anweisung beachten:
Um den Bedingungsausdruck werden keine Klammern benötigt (und üblicherweise werden auch keine verwendet). Stattdessen dient der Zeilenumbruch, das Semikolon oder das Schlüsselwort
then
dazu, den Ausdruck zu begrenzen.
Das Schlüsselwort
end
ist obligatorisch, selbst wenn der bedingt auszuführende Code nur aus einer einzelnen Zeile besteht. Die weiter unten beschriebene Modifier-Form von
if
bietet eine Möglichkeit, einfache Fallentscheidungen ohne das Schlüsselwort
end
zu schreiben.
5.1.1.1 else
Eine
if
-Anweisung kann eine
else
-Klausel enthalten, um Code anzugeben, der ausgeführt werden soll, wenn die Bedingung nicht zutrifft:
if
Ausdruck
Code
else
Code
end
Der Code zwischen dem
if
und dem
else
wird ausgeführt, wenn der Ausdruck irgendetwas anderes als
false
oder
nil
ergibt. Andernfalls (wenn der Ausdruck
false
oder
nil
ist) wird der Code zwischen
else
und
end
ausgeführt. In der einfachsten Form muss der Ausdruck vom nachfolgenden Code durch einen Zeilenumbruch, ein Semikolon oder das Schlüsselwort
then
getrennt werden. Die Schlüsselwörter
else
und
end
beschränken den zweiten Bereich mit Code vollständig, und es werden keine Zeilenumbrüche oder zusätzlichen Trenner benötigt.
Hier sehen Sie ein Beispiel für eine Fallentscheidung, die eine
else
-Klausel enthält:
if data # Wenn das Array existiert ...
data << x # ... einen Wert
Weitere Kostenlose Bücher