Die Programmiersprache Ruby (German Edition)
split
String eval open sprintf
URI exec p srand
abort exit print sub
autoload exit! printf sub!
autoload? fail putc syscall
binding fork puts system
block_given? format rand test
callcc getc readline trap
caller gets readlines warn
chomp gsub scan
# Dies sind häufig verwendete Objektmethoden.
allocate freeze kind_of? superclass
clone frozen? method taint
display hash methods tainted?
dup id new to_a
enum_for inherited nil? to_enum
eql? inspect object_id to_s
equal? instance_of? respond_to? untaint
extend is_a? send
2.1.6 Whitespace
Leerzeichen, Tabs und Zeilenumbrüche sind selbst keine Token, sondern werden verwendet, um Token voneinander zu trennen, die andernfalls ein einzelnes Token ergäben. Abgesehen von dieser grundlegenden Token-Trennfunktion wird der meiste Whitespace vom Ruby-Interpreter ignoriert und einfach verwendet, um Programme so zu formatieren, dass sie einfach zu lesen und zu verstehen sind. Allerdings wird nicht sämtlicher Whitespace ignoriert. An manchen Stellen ist er notwendig, an anderen dagegen sogar verboten. Die Ruby-Grammatik ist ausdrucksstark, aber komplex, und es gibt einige wenige Fälle, in denen das Einfügen oder Entfernen von Whitespace die Bedeutung eines Programms verändern kann. Wenn diese Fälle auch nicht häufig auftreten, ist es wichtig, etwas darüber zu wissen.
2.1.6.1 Zeilenumbrüche als Anweisungstrenner
Die gängigste Form der Whitespace-Abhängigkeit hängt mit Zeilenumbrüchen als Anweisungstrennern zusammen. In Sprachen wie C und Java muss jede Anweisung durch ein Semikolon abgeschlossen werden. Sie können auch in Ruby Semikola verwenden, um Anweisungen abzuschließen, aber das ist nur notwendig, wenn Sie mehr als eine Anweisung in dieselbe Zeile schreiben. Die Konvention schreibt vor, dass die Semikola ansonsten weggelassen werden.
Ohne explizite Semikola muss der Ruby-Interpreter selbst herausfinden, wo Anweisungen enden. Wenn der Ruby-Code in einer Zeile eine syntaktisch vollständige Anweisung ist, verwendet Ruby den Zeilenumbruch als Anweisungstrenner. Ist die Anweisung nicht vollständig, dann fährt Ruby in der nächsten Zeile mit dem Parsen der Anweisung fort. (In Ruby 1.9 gibt es eine Ausnahme, die weiter unten in diesem Abschnitt beschrieben wird.)
Das ist kein Problem, wenn alle Ihre Anweisungen in eine einzelne Zeile passen. Tun sie das dagegen nicht, müssen Sie sicherstellen, die Zeile auf eine Weise zu trennen, dass der Ruby-Interpreter die erste Zeile nicht als vollständige Anweisung interpretieren kann. Genau darin liegt die Whitespace-Abhängigkeit: Ihr Programm kann sich unterschiedlich verhalten, je nachdem, wo Sie einen Zeilenumbruch einfügen. Der folgende Code addiert beispielsweise
x
und
y
und weist die Summe der Variablen
total
zu:
total = x + # Unvollständige Anweisung, weiterparsen
y
Dieser Code dagegen weist der Variablen
total
den Wert
x
zu und wertet dann
y
aus, ohne etwas damit zu machen:
total = x # Dies ist ein vollständiger Ausdruck
+ y # Ein nutzloser, aber vollständiger Ausdruck
Betrachten Sie als anderes Beispiel die Anweisungen
return
und
break
. Auf diese Anweisungen kann optional ein Ausdruck folgen, der einen Rückgabewert liefert. Ein Zeilenumbruch zwischen dem Schlüsselwort und dem Ausdruck beendet die Anweisung vor dem Ausdruck.
Sie können einen Zeilenumbruch sicher (ohne das vorzeitige Ende Ihrer Anweisung befürchten zu müssen) nach einem Operator oder einem Punkt oder Komma in einem Methodenaufruf, einem Array-Literal oder einem Hash-Literal einfügen.
Sie können einen Zeilenumbruch auch mit einem Backslash schützen, was Ruby vom vorzeitigen Beenden der Anweisung abhält:
var total = first_long_variable_name + second_long_variable_name \
+ third_long_variable_name # Beachten: kein Anweisungstrenner oben
In Ruby 1.9 ändern sich die Anweisungstrenner-Regeln leicht. Wenn das erste Nicht-Whitespace-Zeichen einer Zeile ein Punkt ist, wird die Zeile als Fortsetzungszeile betrachtet, und der Zeilenumbruch davor ist kein Anweisungstrenner. Zeilen mit Punkten zu beginnen ist für die langen Methodenketten nützlich, die manchmal in »Fluent APIs« verwendet werden, in denen jeder Methodenaufruf ein Objekt zurückgibt, für das weitere Aufrufe durchgeführt werden können, zum Beispiel
animals = Array.new
.push("Hund") # Funktioniert nicht in Ruby 1.8
.push("Kuh")
.push("Katze")
.sort
2.1.6.2 Leerzeichen und Methodenaufrufe
Die Ruby-Grammatik erlaubt es unter bestimmten Umständen, die Klammern um
Weitere Kostenlose Bücher