Syntax-Sonntag! Heute geht es um Strings (Zeichenketten). Ruby hat einiges zu bieten:
'Die Zeichen \\\\ und \\' muss man escapen.'
Hier passiert nicht viel. Wenn man nichts besonderes vorhat, sollte man diese Variante benutzen. Besonders dann, wenn normale \-Zeichen gebraucht werden:
p File.size('C:\\games\\Diablo II\\Screenshot006.jpg')
Ich sehe häufig, dass sich die Leute hier mit Doppel-Backslashs abkämpfen - unnötig, denn einfache Anführungszeichen betrachten Backslashes als Klartext, solange kein ' oder \ folgt.
"Ich kenne \\n, \\t, \\x20, aber auch #{inline code},\\
#$globale und #@instanzvariablen."
Alle Ruby-Strings können mehrzeilig sein; bei interpretierten Strings kann man den Zeilenwechsel maskieren, er wird dann gelöscht.
Ein heißes Thema, was in solchen Strings alles interpretiert wird. Mir sind bekannt:
"\\d\\g\\h\\i\\j\\k\\l\\o\\p\\q\\u\\w\\y\\z\\8\\9" == "dghijklopquwyz89"
Zwei Abarten von Strings sind Reguläre Ausdrücke und akzentuierte Strings:
"svn switch --relocate #{old_url} http://#{ip} ."
Mithilfe von %-Codes kann man in Ruby all diese Stringsorten erzeugen und dabei beliebige Zeichen als Begrenzer wählen:
%q<I'm a string with "-quotes and a \\\\>
Diese kleinen Helfer sind sehr nützlich und interessant. Darum geht es am nächsten Sonntag.
Heredocs sind beängstigende mehrzeilige Strings, die mit vertikalen Anführungszeichen arbeiten:
pattern = Regexp.new(<<-'EOP'.gsub(/\\w/, '\\w').gsub(/\\s+/, '\\s*')) (w w w) (w w w) (w w w) (r r r) (g g g) (b b b) (o o o) (r r r) (g g g) (b b b) (o o o) (r r r) (g g g) (b b b) (o o o) (y y y) (y y y) (y y y) EOP
Hier wird der Code plötzlich zweidimensional (das Here-Dokument geht in die Höhe), und alles wird komplizierter. Am übernächsten Sonntag gibt es mehr dazu.
Für kurze Skripte benutze ich sehr gerne DATA:
p DATA.read.scan(/\\d+/).inject(0) { |sum, s| sum + s.to_i } __END__ Summiere folgende Zahlen: 23 22 25 26 32 5 22 32 14 15 29 27 18
Auf diese Art kann man sich ein Heredoc sparen und die Daten übersichtlich am Ende der Datei einfügen. Kommt wohl noch aus BASIC.
Viel Spaß mit Ruby!
Kommentar schreiben
Kommentare
[...] Murphy hat Euch in den letzten Wochen, einen tiefen Einblick in die syntaktischen Finessen von Ruby geliefert. Ihr habt normale Strings und Fancy Strings kennengelernt. Es stellte sich heraus, dass Here Docs ebenfalls nur Strings, mit einer zusätzlichen Dimension, sind. Die funktionale Programmierung mit proc Objekten macht Euch das Leben um einiges leichter. Und ein exception handling mit rescue ist nun zu einem selbstverständlichen Codefragment geworden, welches jeden unsicheren Code schmückt. Parallel hierzu möchten wir euch nun auf einer neuen Ebene einen Einblick in unseren Rubin verschaffen. Hierzu fahren wir die Schmelzanlage auf knapp 2050°C hoch und schauen uns an, was sich im inneren des Edelsteins befindet. [...]