Ruby Prozent Notationen

Die Prozent Notation in Ruby ist eindeutig inspiriert durch Perl. Sie erlaubt einfache und interpolierte Generierung von Strings, String Arrays, Symbol Arrays, Shell Befehlen und Regulären Ausdrücken.
Generell besteht sie aus einem Identifikator (Buchstaben) mit dem vorangestellten ‘%’ und den Delimitern.
Die Delimiter können alle nicht-alphanumerischen Zeichen sein.
Einige Beispiele anhand der String Prozent Notation:

%(Ruby ist fantastisch) # => "Ruby ist fantastisch"
%[Ruby ist fantastisch] # => "Ruby ist fantastisch"
%%Ruby ist fantastisch% # => "Ruby ist fantastisch"
%.Ruby ist fantastisch. # => "Ruby ist fantastisch"

Praktischweise brauchen bei Verwendung von Klammern, diese nicht escaped werden, wenn die öffnende und schließende Klammer innerhalb des Wertes verwendet wird (sogar verschachtelte Klammern):

%(Ruby (ist) fantastisch) # => "Ruby (ist) fantastisch"
%[Ruby [ist fantastisch]] # => "Ruby [ist fantastisch]"
%<Ruby <<ist> fantastisch>> # => "Ruby <<ist> fantastisch>"

Alle anderen alphanumerischen Zeichen müssen unbedingt escaped werden:

%-Ruby \-ist\- fantastisch- # => "Ruby -ist- fantastisch"

Daher sollten generell nur Klammern als Delimiter verwendet werden. Zusätzlich erhöhen Klammern auch die Lesbarkeit. Erst recht, wenn ein Klammern styleguide eingehalten wird (siehe Übersichtstabelle).
Ein paar einfache und ein paar interpolierte Prozent Notationen:

language = 'Ruby'

%q('Einfacher' "nicht interpolierter" String.) # => "'Einfacher' \"nicht\" interpolierter String."
%Q(Interpolierter "#{language}" String.) # => "Interpolierter \"Ruby\" String."
%(Interpolierter "#{language}" String (default).) # => "Interpolierter \"Ruby\" String (default)."
# Einfaches nicht interpoliertes String Array:
%w[Ruby Javascript Coffeescript] # => ["Ruby", "Javascript", "Coffeescript"]
# Interpoliertes String Array:
%W[#{language} Javascript Coffeescript] # => ["Ruby", "Javascript", "Coffeescript"]
# Einfaches nicht interpoliertes Symbol Array:
%i[ruby javascript coffeescript] # => [:ruby, :javascript, :coffeescript]
# Interpoliertes Symbol Array:
%I[#{language.downcase} javascript coffeescript] # => [:ruby, :javascript, :coffeescript]
%x(echo #{language} interpolierter shell script Befehl)
# => "Ruby interpolierter shell script Befehl\n"
%r{/#{language} regexp/i} # => /\/Ruby regexp\/i/

Die Prozentnotationen als Übersicht:

Literal Bedeutung Klammerung
%q Einfacher nicht interpolierter String ()
%Q Interpolierter String ()
% Interpolierter String (default) ()
%w Einfaches nicht interpoliertes String Array []
%W Interpoliertes String Array []
%i Einfaches nicht interpoliertes Symbol Array []
%I Interpoliertes Symbol Array []
%x Interpolierter Shell Befehl ()
%r Interpolierter Regulärer Ausdruck {}