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"