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

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition)
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
vielleicht, dass der Wert von
self
auch
Object
wäre. In Wirklichkeit sind Top-Level-Methoden jedoch ein Sonderfall: Methoden werden in
Object
definiert, aber
self
ist ein anderes Objekt. Dieses spezielle Top-Level-Objekt wird als »main«-Objekt bezeichnet, und es gibt nicht viel darüber zu sagen. Die Klasse des Objekts
main
ist
Object
, und es besitzt eine Singleton-
to_s
-Methode, die den String »main« zurückgibt.
    ----
    Die Tatsache, dass Top-Level-Methoden in
Object
definiert werden, heißt, dass sie an alle Objekte (einschließlich
Module
and
Class
) vererbt werden und (falls sie nicht überschrieben werden) in jeder Klassen- oder Instanzmethodendefinition verwendet werden können. (In „7.8 Methoden-Lookup“ können Sie Rubys Algorithmus zur Methodennamensauflösung nachlesen, um sich selbst davon zu überzeugen.) Die Tatsache, dass Top-Level-Methoden private Methoden sind, bedeutet, dass sie wie Funktionen aufgerufen werden müssen, ohne expliziten Empfänger. Auf diese Weise ahmt Ruby in seinem streng objektorientierten Framework ein prozedurales Programmierparadigma nach.

10.3 »Practical Extraction and Report«-Arbeitserleichterungen
    Ruby wurde von der Skriptsprache Perl beeinflusst, deren Name ein Akronym für Practical Extraction and Reporting Language ist. Daher enthält Ruby eine Reihe globaler Funktionen, die das Schreiben von Programmen zum Extrahieren von Informationen und zum Erstellen von Berichten erleichtern. Im objektorientierten Paradigma sind Ein- und Ausgabefunktionen Methoden von
IO
, und String-Manipulationsfunktionen sind Methoden von
String
. Aus pragmatischen Gründen ist es allerdings oft sinnvoll, globale Funktionen zu haben, die aus vordefinierten Ein- und Ausgabedatenströmen lesen und in diese schreiben. Ruby stellt nicht nur diese globalen Funktionen zur Verfügung, sondern folgt Perl weiter und definiert spezielles Verhalten für diese Funktionen: Viele von ihnen arbeiten implizit mit der speziellen methodenlokalen Variablen
$_
. Diese Variable enthält die zuletzt gelesene Zeile aus dem Eingabedatenstrom. Der Unterstrich ist eine Merkhilfe: Er sieht aus wie eine Zeile. (Viele von Rubys globalen Variablen, die Satzzeichen verwenden, wurden aus Perl übernommen.) Neben den globalen Ein- und Ausgabefunktionen gibt es diverse globale String-Verarbeitungsfunktionen, die wie die String-Methoden funktionieren, aber implizit mit
$_
arbeiten.
    Diese globalen Funktionen und Variablen sind als Arbeitserleichterungen für kurze und einfache Ruby-Skripte gedacht. Es gilt im Allgemeinen als schlechter Stil, sich in längeren Programmen auf sie zu verlassen.
    10.3.1 Eingabefunktionen
    Die globalen Funktionen
gets
,
readline
und
readlines
entsprechen den gleichnamigen
IO
-Methoden (siehe „9.7.3.1 Zeilen lesen“ ), aber sie arbeiten implizit mit dem Datenstrom
$<
(der auch als Konstante namens
ARGF
verfügbar ist). Genau wie die Methoden von
IO
setzen diese globalen Funktionen implizit
$_
.
    $<
verhält sich wie ein
IO
-Objekt, ist aber keines. (Seine
class
-Methode liefert
Object
zurück und seine
to_s
-Methode »ARGF«.) Das genaue Verhalten dieses Datenstroms ist kompliziert. Wenn das Array
ARGV
leer ist, dann ist
$<
dasselbe wie
STDIN
: der Standardeingabe-Datenstrom. Wenn
ARGV
nicht leer ist, nimmt Ruby an, dass es eine Liste von Dateinamen ist. In diesem Fall verhält sich
$<
, als läse es aus einer Verkettung all dieser Dateien. Dies beschreibt das Verhalten von
$<
jedoch nicht korrekt. Wenn die erste Leseanfrage für
$<
eintrifft, verwendet Ruby
ARGV.shift
, um den ersten Dateinamen aus
ARGV
zu entfernen. Die Datei wird geöffnet, und es wird daraus gelesen. Wenn das Ende dieser Datei erreicht ist, wiederholt Ruby den Vorgang, shiftet den nächsten Dateinamen aus
ARGV
und öffnet diese Datei.
$<
meldet kein End-of-File, bis sich keine weiteren Dateinamen mehr in ARGV befinden.
    Das bedeutet, dass Ihre Ruby-Skripten
ARGV
(beispielsweise zum Verarbeiten von Kommandozeilenoptionen) modifizieren können, bevor sie anfangen, aus
$<
zu lesen. Ihr Skript kann auch zur Laufzeit zusätzliche Dateien zu
ARGV
hinzufügen, und
$<
verwendet diese Dateien.
    10.3.2 Veraltete Extraktionsfunktionen
    In Ruby 1.8 und früher funktionieren die globalen Funktionen
chomp
,
chomp!
,
chop
,
chop!
,
gsub
,
gsub!
,
scan
,
split
,
sub
und
sub!
genau wie die gleichnamigen Methoden von
String
, aber sie arbeiten implizit mit
$_
. Außerdem weisen
chomp
,
chop
,
gsub
und
sub
ihr Ergebnis wieder
$_
zu, so
Vom Netzwerk:

Weitere Kostenlose Bücher