Ich benutze Ruby seit ungefähr zwei Wochen, und ich habe nicht zu lange programmiert, aber ich komme mit der Sprache aus einem C-Stil Hintergrund (C ++, C #, etc). Wie auch immer - ein guter Freund und Mentor von mir sah sich Ruby an, den ich neulich geschrieben hatte, und er sagte mir, dass er mich schlagen würde, wenn er mich wieder mit geschweiften Klammern in Ruby erwischen würde.
Nun, ich habe gerade erst gestern von Builder erfahren, über diesen About.com Artikel , und das Beispiel, das sie gepostet haben, verwendet geschweifte Klammern. Gibt es eine andere Möglichkeit, dies zu tun, oder müssen Sie geschweifte Klammern mit Builder verwenden?
Das mag wie ein kleiner Punkt erscheinen, aber ich bin neu bei Ruby, und ich möchte mir keine schlechten Angewohnheiten erlauben. Was denkst du?
Während einige Leute mit "Klammern für Einzeiler, Do-End für Multiliner" gehen, finde ich persönlich die folgende Regel am logischsten:
do-end
, wenn Ihr Block Nebenwirkungen hat (normalerweise mit each
und verwandten Methoden) und map
, inject
und ähnliche) Diese Logik passt gut zu dem Problem der Methodenverkettung, über das Matt geschrieben hat.
Ein Vorteil dieses Ansatzes besteht darin, dass Sie jedes Mal, wenn Sie einen Block schreiben, über Nebenwirkungen nachdenken, und sie sind sehr wichtig, obwohl sie manchmal von Programmierern ohne funktionalen Programmierhintergrund übersehen werden.
Eine andere Möglichkeit, dies zu sagen, ohne die Terminologie der Nebenwirkungen zu berücksichtigen, wäre:
do-end
für Blöcke, die ausführen
{
und }
für Blöcke, die zurückgeben
Hier sind ein paar Artikel mit mehr Informationen:
Idiomatischer Rubin ist
%Vor% Ein Grund dafür ist die Verkettung, foo.map {|f| f.num}.reduce(0) {|memo, i| memo + i}
sieht schöner aus als ein Methodenaufruf von end
like
Es gibt etwas Seltsames beim Aufruf einer Methode von end
, obwohl syntaktisch die beiden äquivalent sind.
Die übliche Konvention lautet { ... }
blocks für Einzeiler und do ... end
für Multiliner. Ich folge generell dieser Konvention, aber sollte ich jemals König sein, denke ich, dass ich do .. end
öfter verwenden würde.
Ein gelegentliches Problem mit {}
ist, dass {}
enger bindet als do end
, so dass die Methode only verwendet werden kann, um einen Poesie-Modus-Block für eine Methode zu schreiben, die auch Parameter hat do end
, andernfalls ist der Block Teil des Parameters und wird nicht direkt an die Methode übergeben.
Wenn Sie gewollt einen Block im Poetry-Modus an einen Parameter anhängen möchten, gewinnen Sie natürlich mit {}
, gefolgt von do end
.
Schließlich, und im Gegensatz zu einigen der Ratschläge, die Sie hier erhalten haben, ist ein ;
nicht vor end
erforderlich.
"Der Ruby-Weg" befürwortet keinen bestimmten Stil. Wenn sie nicht möchten, dass Sie geschweifte Klammern verwenden können, wäre das nicht in der Sprache. Das entspricht dem Stil Ihres Teams (wenn Sie mit einem Team arbeiten).
Der meiste Ruby-Code, den ich gesehen habe, verwendet end
anstelle von geschweiften Klammern, aber ich benutze Ruby nicht, so dass ich nicht sicher sagen kann, dass dies der bevorzugte Stil ist. Ruby hat mehr als einen Weg, Dinge zu tun - Sie können den Weg wählen, der Ihnen gefällt (im Rahmen des Zumutbaren).
Tags und Links ruby forms builder curly-braces