Samstag, September 27, 2008

The Pragmatic Programmer (Ruby Teil 2)

Ich habe mir jetzt das erste Kapitel einer online Version des Pragmatic Programmers angetan. Dieses Buch scheint die Bibel der Ruby Programmierer zu sein.

Von den Grundlagen gefallen mir die vereinfachten Initialisierungen von Arrays und Maps (Hash) sehr gut. Damit kann man sich viel Mühe und stupide Arbeit sparen.
Beispiele:
[3.1415, "Pi", 2008] erzeugt einen Array
{ 'a' => 'Einleitung', 'b' => 'Grundlagen', 'c' => 'Objekte' } erzeugt eine Map

Vielversprechend sind auch die ominösen Closures, bei denen junge Programmierer, die gerade von Schweinecode-Skriptsprachen umsteigen, feucht werden.

Und die direkte Einbindung von regulären Ausdrücken (mittels =~ und // ) ist auch eine feine Sache.

Aber es ist mir unerträglich mit welcher Selbstverständlichkeit Fakten zurechtgebogen werden, um Ruby im Gegensatz zu anderen Programmiersprachen gut aussehen zu lassen. Da werden die blödesten Rückfälle in alte Zeiten garniert mit den Prädikaten "einfacher", "besser" und ganz wichtig "eleganter". Damit will man doch nur unerfahrene Leser über den Leisten ziehen.

Eine Freude war mir, wie die Möglichkeit Klammern in allen Varianten wegzulassen erst als Feature verkauft wird - und dann im Nachsatz darauf hingewiesen wird, dass man sie lieber setzen sollte, weil man sonst durcheinander kommt.
Der Compiler, den ich verwende, warnt generell davor Klammern bei Methodenaufrufen wegzulassen, um "mit zukünftigen Versionen kompatibel zu sein".

Und wer denkt sich heute noch eine Sprache aus bei der das Ende der Zeile das Ende des Befehls darstellt? Will man damit erreichen, dass man alle Aktionen freiwillig so klein und überschaubar hält, dass das nicht stört?
Aber das stimmt nicht so ganz, denn man kann nach bestimmten Zeichen ( . , ) anscheinend in die nächste Zeile umbrechen.

geht:
[1,
2]

geht nicht:
[1
, 2]

Zitat aus dem Pragmatic Programmer:
Allerdings gab es bis Ruby eine Unterstützung für reguläre Ausdrücke nur in den sogenannten Script-Sprachen wie Perl, Python und awk.
... und Ruby ist keine Skriptsprache? Und Ruby hat nicht seine ganze RegExp Syntax bei Perl abgekupfert? Und andere objektorientierte Sprachen haben keine RegExp Bibliotheken?
Eine "nicht-Skriptsprache" würde wohl kaum einen Unterschied machen, ob der Aufruf oder die Deklaration einer Methode zuerst in einer Datei steht.