Die Programmiersprache Ruby (German Edition)
bedeutet, dass der Rumpf keinmal, einmal oder mehrmals ausgeführt wird, solange die Bedingung
false
oder
nil
ist. Beachten Sie, dass jede
until
-Schleife einfach durch Negation der Bedingung in eine
while
-Schleife konvertiert werden kann. Die meisten Programmierer sind mit
while
-Schleifen vertraut, aber viele haben bisher noch keine
until
-Schleifen verwendet. Aus diesem Grund sollten Sie
while
-Schleifen verwenden, es sei denn,
until
verbessert wirklich die Klarheit Ihres Codes.
Das Schlüsselwort
do
in einer
while
- oder
until
-Schleife entspricht dem Schlüsselwort
then
in einer
if
-Anweisung: Es kann ganz weggelassen werden, solange ein Zeilenumbruch (oder ein Semikolon) zwischen der Schleifenbedingung und dem Schleifenrumpf steht. [ 20 ]
5.2.2 while und until als Modifier
Wenn der Rumpf einer Schleife ein einzelner Ruby-Ausdruck ist, können Sie diese Schleife in besonders kompakter Form ausdrücken, indem Sie
while
oder
until
als Modifier hinter dem Ausdruck verwenden, zum Beispiel:
x = 0 # Schleifenvariable initialisieren
puts x = x + 1 while x < 10 # Ausgabe und Inkrement im selben Ausdruck
Diese Modifier-Syntax verwendet das Schlüsselwort
while
selbst, um den Schleifenrumpf von der Schleifenbedingung zu trennen, und benötigt daher nicht die Schlüsselwörter
do
(oder Zeilenumbruch) und
end
. Vergleichen Sie diesen Code mit der in eine Zeile geschriebenen traditionelleren
while
-Schleife:
x = 0
while x < 10 do puts x = x + 1 end
until
kann genau wie
while
als Modifier verwendet werden:
a = [1,2,3] # Ein Array initialisieren
puts a.pop until a.empty? # Elemente herausholen, bis das Array leer ist
Beachten Sie: Wenn
while
und
until
als Modifier verwendet werden, müssen sie in derselben Zeile stehen wie der Schleifenrumpf, den sie modifizieren. Wenn es einen Zeilenumbruch zwischen dem Schleifenrumpf und dem Schlüsselwort
while
beziehungsweise
until
gibt, dann behandelt der Ruby-Interpreter den Schleifenrumpf als unmodifizierten Ausdruck und das
while
oder
until
als den Beginn einer regulären Schleife.
Wenn
while
und
until
als Modifier für einen einzelnen Ruby-Ausdruck verwendet werden, wird die Schleifenbedingung zuerst geprüft, obwohl sie hinter dem Schleifenrumpf steht. Der Schleifenrumpf wird genauso keinmal, einmal oder mehrmals ausgeführt, als wäre er als reguläre
while
- oder
until
-Schleife formatiert.
Es gibt eine spezielle Ausnahme von dieser Regel: Wenn der ausgewertete Ausdruck ein Verbundausdruck ist, der durch die Schlüsselwörter
begin
und
end
begrenzt wird, dann wird der Rumpf zuerst ausgeführt, bevor die Bedingung geprüft wird.
x = 10 # Schleifenvariable initalisieren
begin # Verbundausdruck beginnen: wird mindestens einmal ausgeführt
puts x # x ausgeben
x = x - 1 # x vermindern
end until x == 0 # Verbundausdruck beenden und durch Schleife modifizieren
Daraus ergibt sich ein Konstrukt, das stark der
do/while
-Schleife in C, C++ und Java ähnelt. Trotz dieser Ähnlichkeit zur
do/while
-Schleife anderer Sprachen ist dieses spezielle Verhalten von Schleifen-Modifiern mit
begin
-Anweisung kontraintuitiv, und von seiner Verwendung wird abgeraten. Zukünftige Versionen von Ruby könnten die Verwendung von
while
- und
until
-Modifiern mit
begin/end
verbieten.
Beachten Sie, dass die Gruppierung mehrerer Anweisungen durch Klammern, auf die Sie einen
until
-Modifier anwenden, nicht zu diesem speziellen Verhalten führt:
x = 0 # Schleifenvariable initialisieren
( # Verbundausdruck beginnen: kann 0-mal ausgeführt werden
puts x # x ausgeben
x = x - 1 # x dekrementieren
) until x == 0 # Verbundausdruck beenden und durch Schleife modifizieren
5.2.3 Die for/in-Schleife
Die
for
-Schleife oder
for/in
-Schleife iteriert über die Elemente eines Aufzählungsobjekts (etwa eines Array). Bei jeder Iteration weist es einer angegebenen Schleifenvariablen ein Element zu und führt dann den Rumpf der Schleife aus. Eine
for
-Schleife sieht so aus:
for
Var
in
Sammlung
do
Rumpf
end
Var ist eine Variable oder eine kommaseparierte Liste von Variablen. Sammlung ist irgendein Objekt, das eine
each
-Iteratormethode besitzt. Arrays und Hashes definieren die Methode
each
, und viele andere Ruby-Objekte ebenfalls. Die
for/in
-Schleife ruft die
each
-Methode des angegebenen Objekts auf. Während dieser Iterator Werte erhält, weist die
for
-Schleife jeden Wert (oder jeden Satz von Werten) der (oder den) angegeben Variablen zu und führt dann den Code im Rumpf aus. Genau wie bei den
while
-
Weitere Kostenlose Bücher