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:
Implementierung) daran, Continuations zu unterstützen. Da sie nicht mehr gut unterstützt werden, sollten Continuations als Rarität betrachtet werden, und neuer Ruby-Code sollte sie nicht einsetzen. Wenn Sie Ruby-1.8-Code haben, der sich auf Continuations verlässt, könnten Sie ihn so konvertieren, dass er in Ruby 1.9 Fiber verwendet.
    Die
Kernel
-Methode
callcc
führt ihren Block aus und übergibt ihm ein neu erzeugtes
Continuation
-Objekt als einziges Argument. Das
Continuation
-Objekt hat eine
call
-Methode, die den
callcc
-Aufruf zu seiner aufrufenden Stelle zurückkehren lässt. Der Wert, der an
call
übergeben wird, wird zum Rückgabewert des
callcc
-Aufrufs. In diesem Sinn ist
callcc
wie
catch
, und die
call
-Methode des
Continuation
-Objekts ist wie
throw
.
    Continuations sind jedoch anders, weil das
Continuation
-Objekt in einer Variablen außerhalb des
callcc
-Blocks gespeichert werden kann. Die
call
-Methode dieses Objekts kann wiederholt aufgerufen werden und sorgt dafür, dass die Kontrolle zur ersten Anweisung nach dem
callcc
-Aufruf springt.
    Der folgende Code demonstriert, wie Continuations verwendet werden können, um eine Methode zu definieren, die wie die
goto
-Anweisung in der Programmiersprache BASIC funktioniert:
# Globales Hash, um Zeilennummern (oder Symbole) den
# Continuations zuzuordnen
$lines = {}
# Continuation erzeugen und der angegebenen Zeilennummer zuordnen
def line(symbol)
callcc {|c| $lines[symbol] = c }
end
# Mit der Zahl verknüpfte Continuation nachschlagen und dorthin springen
def goto(symbol)
$lines[symbol].call
end
# Nun können wir so tun, als programmierten wir in BASIC
i = 0
line 10 # Diesen Punkt als Zeile 10 deklarieren
puts i += 1
goto 10 if i < 5 # Zurück zu Zeile 10, wenn Bedingung zutrifft
line 20 # Diesen Punkt als Zeile 20 definieren
puts i -= 1
goto 20 if i > 0
    ----
    [ 18 ] Ruby 1.8 erlaubt auch einen Doppelpunkt, aber diese Syntax ist in 1.9 nicht mehr zulässig.
    [ 19 ] Ruby 1.8 erlaubt einen Doppelpunkt anstelle des
then
, genau wie bei der
if
-Anweisung, aber in Ruby 1.9 wird diese Syntax nicht mehr unterstützt.
    [ 20 ] In Ruby 1.8 kann ein Doppelpunkt anstelle des Schlüsselworts do verwendet werden. Das ist in Ruby 1.9 nicht mehr erlaubt.
    [ 21 ] Innerhalb der japanischen Entwickler-Community ist der Begriff »Iterator« aus der Mode gekommen, weil er eine Iteration impliziert, die eigentlich kein notwendiger Bestandteil ist. Eine Phrase wie »Methode, die einen verknüpften Block erwartet« ist lang, aber präziser.
    [ 22 ] chars wurde in Ruby 1.9.0 weggelassen, aber dieses Versehen wurde kurz nach dem ursprünglichen Release korrigiert.
    [ 23 ] Design Patterns: Elements of Reusable Object-Oriented Software von Gamma, Helm, Johnson und Vlissides (Addison-Wesley).
    [ 24 ] Die Ruby 1.8-Methode
each_pair
übergibt zwei separate Werte an den Block. In Ruby 1.9 ist der Iterator
each_pair
ein Synonym für
each
und übergibt ein einzelnes Argument, was in Kürze erläutert wird. Der hier gezeigte Code funktioniert allerdings in beiden Versionen korrekt.
    [ 25 ] Wir werden eine Ausnahme sehen, wenn wir in „6.5.5.1 Return in Blöcken, Procs und Lambdas“ Lambdas betrachten. Ein Lambda ist eine Art Funktion, die aus einem Block erstellt wird, und das Verhalten von
return
in einem Lambda unterscheidet sich von seinem Verhalten in einem gewöhnlichen Block.

Kapitel 6. Methoden, Procs, Lambdas und Closures
    Eine Methode ist ein benannter Block von parametrisiertem Code, der mit einem oder mehreren Objekten verknüpft ist. Ein Methodenaufruf gibt den Methodennamen an, das Objekt, für das die Methode aufgerufen wird (manchmal Empfänger oder englisch receiver genannt), sowie null oder mehr Argumentwerte, die den benannten Methodenparametern zugewiesen werden. Der Wert des zuletzt in der Methode ausgewerteten Ausdrucks wird zum Wert des Methodenaufrufausdrucks.
    Viele Sprachen unterscheiden zwischen Funktionen, die kein zugehöriges Objekt besitzen, und Methoden, die für ein Empfängerobjekt aufgerufen werden. Da Ruby eine rein objektorientierte Sprache ist, sind alle Methoden echte Methoden und mindestens einem Objekt zugeordnet. Wir haben Klassendefinitionen in Ruby noch nicht besprochen, so dass die in diesem Kapitel definierten Beispielmethoden für Sie so aussehen wie globale Funktionen ohne zugehöriges Objekt. Tatsächlich werden sie in Ruby als private Methoden der Klasse
Object
definiert und aufgerufen.
    Methoden sind ein grundlegender Teil der

Weitere Kostenlose Bücher