Die Programmiersprache Ruby (German Edition)
Es gibt in Ruby keine spezielle
main
-Methode, in der die Ausführung beginnt. Der Ruby-Interpreter erhält ein Skript aus Anweisungen zur Ausführung, beginnt diese Ausführung in der ersten Zeile und setzt sie bis zur letzten Zeile fort.
(Eigentlich ist diese letzte Anweisung nicht ganz korrekt. Zuerst durchsucht der Ruby-Interpreter die Datei nach
BEGIN
-Anweisungen und führt den Code in deren Rümpfen aus. Dann springt er zurück zu Zeile 1 und startet die sequenzielle Ausführung. Siehe „5.7 BEGIN und END“ für weitere Informationen über
BEGIN
.)
Ein weiterer Unterschied zwischen Ruby und kompilierten Sprachen hat mit Modul-, Klassen- und Methodendefinitionen zu tun. In kompilierten Sprachen sind sie syntaktische Strukturen, die durch den Compiler verarbeitet werden. In Ruby sind sie Anweisungen wie alle anderen auch. Wenn der Ruby-Interpreter auf eine Klassendefinition trifft, führt er sie aus, wodurch eine neue Klasse ihre Existenz beginnt. Wenn der Ruby-Interpreter entsprechend auf eine Methodendefinition trifft, führt er diese aus, was dazu führt, dass eine neue Methode definiert wird. Später im Programm wird der Interpreter wahrscheinlich einen Methodenaufruf-Ausdruck für die Methode antreffen und ausführen, und dieser Aufruf wird dafür sorgen, dass die Anweisungen im Methodenrumpf ausgeführt werden.
Der Ruby-Interpreter wird von der Kommandozeile aufgerufen und erhält ein Skript zur Ausführung. Sehr einfache, einzeilige Skripte werden manchmal direkt auf die Kommandozeile geschrieben. Häufiger wird allerdings der Name der Datei angegeben, die das Skript enthält. Der Ruby-Interpreter liest die Datei und führt das Skript aus. Zuerst führt er eventuelle
BEGIN
-Blöcke aus. Danach beginnt er in der ersten Zeile der Datei und fährt fort, bis einer der folgenden Fälle eintritt:
Er führt eine Anweisung aus, die dafür sorgt, dass das Ruby-Programm beendet wird.
Er erreicht das Ende der Datei.
Er liest eine Zeile, die das logische Ende der Datei mit dem Token
__END__
markiert.
Vor dem Beenden führt der Ruby-Interpreter üblicherweise (falls nicht die Methode
exit!
aufgerufen wurde) die Rümpfe sämtlicher
END
-Anweisungen aus, die er gefunden hat, sowie jeglichen anderen »Shutdown Hook«-Code, der mit der Funktion
at_exit
registriert wurde.
----
[ 6 ] Ruby folgt hierbei der Python-Konvention; siehe http://python.org/dev/peps/pep-0263/ .
Kapitel 3. Datentypen und Objekte
Um eine Programmiersprache zu verstehen, müssen Sie wissen, welche Arten von Daten sie manipulieren und was sie mit diesen Daten tun kann. Dieses Kapitel behandelt die Werte, die von Ruby-Programmen manipuliert werden. Es beginnt mit der vollständigen Behandlung von Zahlen- und Textwerten. Danach erklärt es Arrays und Hashes – wichtige Datenstrukturen, die zwei der Grundlagen von Ruby bilden. Danach geht es weiter mit der Erläuterung von Bereichen, Symbolen sowie den speziellen Werten
true
,
false
und
nil
. Alle Ruby-Werte sind Objekte, und dieses Kapitel schließt mit der detaillierten Behandlung der Features, die alle Objekte gemeinsam haben.
Die Klassen, die in diesem Kapitel beschrieben werden, sind die grundlegenden Datentypen der Sprache Ruby. Dieses Kapitel beschreibt das grundlegende Verhalten dieser Typen: wie literale Werte in einem Programm geschrieben werden, wie Integer- und Fließkomma-Arithmetik funktionieren, wie Textdaten kodiert werden, wie Werte als Hash-Keys verwendet werden können und so weiter. Zwar erklären wir hier Zahlen, Strings, Arrays und Hashes, aber dieses Kapitel macht keinen Versuch, die APIs zu erläutern, die durch diese Typen definiert werden. Stattdessen demonstriert Kapitel 9 diese APIs anhand von Beispielen, und es behandelt auch viele andere wichtige (aber nicht grundlegende) Klassen.
3.1 Zahlen
Ruby enthält fünf eingebaute Klassen zur Darstellung von Zahlen, und die Standardbibliothek enthält drei weitere numerische Klassen, die manchmal nützlich sind. Abbildung 3.1 zeigt die Klassenhierarchie.
Abbildung 3.1 Hierarchie der numerischen Klassen
Alle Zahlenobjekte in Ruby sind Instanzen von
Numeric
. Alle ganzen Zahlen (Integer) sind Instanzen von
Integer
. Wenn ein Integer-Wert in 31 Bit (in den meisten Implementierungen) hineinpasst, ist er eine Instanz von
Fixnum
. Andernfalls ist er eine
Bignum
.
Bignum
-Objekte stellen Integer beliebiger Größe dar, und wenn das Ergebnis einer Operation mit
Fixnum
-Operationen zu groß ist, um in eine
Fixnum
zu passen,
Weitere Kostenlose Bücher