Gehen geschweifte Klammern gegen den "Ruby-Weg"?

7

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?

    
eckza 02.03.2011, 16:20
quelle

4 Antworten

10

Während einige Leute mit "Klammern für Einzeiler, Do-End für Multiliner" gehen, finde ich persönlich die folgende Regel am logischsten:

  • Verwenden Sie do-end , wenn Ihr Block Nebenwirkungen hat (normalerweise mit each und verwandten Methoden) und
  • Verwenden Sie Klammern, wenn Ihr Block ohne Nebenwirkungen ist ( 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:

  • Verwenden Sie do-end für Blöcke, die ausführen
  • Verwenden Sie { und } für Blöcke, die zurückgeben

Hier sind ein paar Artikel mit mehr Informationen:

Ссылка

Ссылка

    
Mladen Jablanović 02.03.2011, 17:03
quelle
10

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

%Vor%

Es gibt etwas Seltsames beim Aufruf einer Methode von end , obwohl syntaktisch die beiden äquivalent sind.

    
Matt Briggs 02.03.2011 16:25
quelle
4

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.

%Vor%

Wenn Sie gewollt einen Block im Poetry-Modus an einen Parameter anhängen möchten, gewinnen Sie natürlich mit {} , gefolgt von do end .

%Vor%

Schließlich, und im Gegensatz zu einigen der Ratschläge, die Sie hier erhalten haben, ist ein ; nicht vor end erforderlich.

    
DigitalRoss 02.03.2011 18:10
quelle
-2

"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).

    
Rafe Kettler 02.03.2011 16:25
quelle

Tags und Links