Code-Layout
Ausdrücke in Ruby werden durch Zeilenumbrüche getrennt
x = 1 y = 2 z = x + y
Zeilenumbrüche werden auch als logische Trennzeichen für die Header einiger Kontrollstrukturen von ihren Körpern verwendet
if z > 3 # line break ends the condition and starts the body puts "more" end while x < 3 # line break ends the condition and starts the body x += 1 end
; kann anstelle eines Zeilenumbruchs als Ausdruckstrenner verwendet werden
x = 1; y = 2; z = x + y if z > 3; puts "more"; end
Traditionell werden Ausdrücke, die durch ; getrennt sind, nur in kurzen Skripten und Experimenten verwendet.
Bei einigen Kontrollstrukturen gibt es ein optionales Schlüsselwort, das anstelle eines Zeilenumbruchs verwendet werden kann, um ihre Elemente zu trennen
# if, elsif, until and case ... when: 'then' is an optional separator: if z > 3 then puts "more" end case x when Numeric then "number" when String then "string" else "object" end # while and until: 'do' is an optional separator while x < 3 do x +=1 end
Auch Zeilenumbrüche können an einigen Stellen übersprungen werden, wo dies keine Mehrdeutigkeit schafft. Beachten Sie im obigen Beispiel: Kein Zeilenumbruch vor end erforderlich, ebenso wenig wie nach else.
Ausdrücke in Zeilen aufteilen
Ein Ausdruck kann auf mehrere Zeilen aufgeteilt werden, wenn jede Zeile eindeutig als "unvollständig" ohne die nächste identifiziert werden kann.
Dies funktioniert
x = # incomplete without something after = 1 + # incomplete without something after + 2 File.read "test.txt", # incomplete without something after , enconding: "utf-8"
Dies würde nicht funktionieren
# unintended interpretation:
x = 1 # already complete expression
+ 2 # interpreted as a separate +2
# syntax error:
File.read "test.txt" # already complete expression
, encoding: "utf-8" # attempt to parse as a new expression, SyntaxError
Ausnahmen von der Regel sind Zeilen, die mit . ("Leading Dot"-Stil von Methodenaufrufen) oder logischen Operatoren &&/|| und and/or beginnen
# OK, interpreted as a chain of calls File.read('test.txt') .strip("\n") .split("\t") .sort # OK, interpreted as a chain of logical operators: File.empty?('test.txt') || File.size('test.txt') < 10 || File.read('test.txt').strip.empty?
Wenn der Ausdruck auf eine der oben beschriebenen Arten in mehrere Zeilen aufgeteilt wird, sind Kommentare zwischen den einzelnen Zeilen erlaubt
sum = base_salary + # see "yearly bonuses section" yearly_bonus(year) + # per-employee coefficient is described # in another module personal_coeff(employee) # We want to short-circuit on empty files File.empty?('test.txt') # Or almost empty ones || File.size('test.txt') < 10 # Otherwise we check if it is full of spaces || File.read('test.txt').strip.empty?
Schließlich kann der Code Ruby explizit mitteilen, dass der Ausdruck mit \ auf der nächsten Zeile fortgesetzt wird
# Unusual, but works File.read "test.txt" \ , encoding: "utf-8" # More regular usage (joins the strings on parsing instead # of concatenating them in runtime, as + would do): TEXT = "One pretty long line" \ "one more long line" \ "one other line of the text"
Das \ fungiert als Zeilenumbruch-Escape auf Parse-Ebene, daher können mit ihm keine Kommentare zwischen die Zeilen eingefügt werden
TEXT = "line 1" \ # here would be line 2: "line 2" # This is interpreted as if there was no line break where \ is, # i.e. the same as TEXT = "line 1" # here would be line 2: "line 2" puts TEXT #=> "line 1"