Zucker für Syntax-Spielkinder, diesmal:
Ruby-Mine präsentiert lustige Kommas am Ende von Methodendefinitionen.
Nein, keine Litschi, sondern ein weiteres interessantes Detail der Ruby-Syntax.
Die Geschichte stammt von einem Tippfehler von zickzackv in einem Projekt für die Arbeit. Er schrieb:
def file_replace filename, file, files = document.files ...
Der Code machte das, was er sollte. Das liegt daran, dass die Zeile nach dem def von Ruby als optionales Argument verstanden wird. Als hätte man geschrieben:
def file_replace filename, file, files = document.files
Fiel uns dank der automatisch versendeten Commit-Meldungen mit Diffs auf. Funktioniert ohne Klammern, und vor allem: ohne Warnung. Eine klare Fehlerquelle, und Futter für Codegolfer und andere Freaks ;)
Nicht wirklich. Ich dachte, man könnte es vielleicht nutzen, um die Parameter zu dokumentieren:
def divide \ a, # dividend b # divisor a / b end
Aber natürlich kapiert Rdoc das nicht, es kommt nur bis zum Komma (immerhin). Sieht außerdem hässlich aus. K&R-Stil.
Ich habe jetzt erstmal eine Mail an ruby-core geschickt mit dem Vorschlag, eine passende Warnung in Ruby einzubauen.
Wie verhindert man solche Tippfehler, solange es keine Ruby-Warnung gibt? Man kann natürlich seinen Code checken lassen:
for file_name in Dir['**/*.rb'] data = File.read file_name puts file_name if data[/^\s*def\b[^(\n]*,\s*$/] end
aber das ist langsam und doof. Man kann auch immer Klammern benutzen, dann hätte man das Problem im Anfangsbeispiel sofort bemerkt, denn Ruby erlaubt keine Klammern am Ende von Signaturen (syntax error, unexpected ')').
Für Leute, die lieber ohne Klammern programmieren (wie ich (meistens jedenfalls (es sei denn ich muss))) bleibt nur: Aufpassen.
Kommentar schreiben
Kommentare
Very very funny comma ;-)