2013-06-19 17 views
7

So:Ist es schlecht, Operationen in # {this} zu setzen?

puts "Today my ostrich laid #{@eggs_laid - @stillborn - @wolves_ate} valid eggs."

Wenn dies ist buchstäblich der einzige Ort, wo ich diese spezifische Berechnung benötigt werden würde, gibt es einen Punkt eine valid_eggs Funktion bei der Herstellung?

+0

Ich weiß, ich habe eine Antwort geschrieben, aber das ist wirklich keine konstruktive Frage. Es ist so eine einfache Aussage, dass es in beide Richtungen gehen könnte, etwas Komplexeres und die meisten Leute werden die Extraktion empfehlen. Ich tendiere dazu, eine Arbeitspraxis zu haben, in der, wenn ich nach einer Weile zu einem solchen Code zurückkomme und es nicht sofort klar ist, was es tut, es sich lohnt, es zu extrahieren, weil es an Klarheit mangelt. – Abizern

+0

Sie und einige andere sehr hochrangige Benutzer * alle * haben geantwortet, anstatt Ihre Stimmen abzugeben. Dies ist * vollständig * subjektiv, bis zu dem Punkt, an dem die Antwort mit der höchsten Bewertung von einem Benutzer mit 71.000 Wiederholungen mit "Dies ist eine Meinung" beginnt. Dies ist ausdrücklich * nicht * wofür Stack Overflow ist. – meagar

+0

Korrektur - Ich habe knapp abgestimmt, kurz bevor ich meinen Kommentar hinzugefügt habe. – Abizern

Antwort

5

Es ist nicht von Natur aus schlecht. Wenn der Ausdruck jedoch komplex ist, verringert dies die Lesbarkeit des Codes. Hier stelle ich die zwei Schnipsel hier, welche liest man besser?

puts "Today my ostrich laid #{@eggs_laid - @stillborn - @wolves_ate} valid eggs." 

valid_eggs = @eggs_laid - @stillborn - @wolves_ate 
puts "Today my ostrich laid #{valid_eggs} valid eggs." 
+2

Lohnt es sich wirklich, eine temporäre Variable zu haben, die an einer Stelle anstelle einer perfekt lesbaren Menge von Aktionen verwendet wird? Ich stimme zu, dass es Orte gibt, wo es besser lesbar wäre, aber in diesem Fall ist es umstritten. – Abizern

+0

@Abizer Möglicherweise, ja: es ist * in der Zeichenfolge * lesbar. Aber es ist innerhalb der Saite, und es gibt einen kognitiven Schalter, den ich eher vermeiden würde. –

+0

@Abizern: Ich würde diesen Ausdruck in lokale Var extrahieren, wenn Sie das fragen. Erleichtert das Lesen der Zeichenfolge. –

3

Absolut nicht. Putting Code innerhalb #{...} Interpolatoren ist ein legitimer Teil Spaß in Ruby. Zur besseren Lesbarkeit sollten Sie überlegen:

puts "Today my ostrich laid %s valid eggs." % (@eggs_laid - @stillborn - @wolves_ate) 

Aber beachten Sie, dass % Interpolation und #{...} Interpolation zwei verschiedene Arten von Spaß, die nicht vollständig austauschbar sind.

+0

* + 1 * für diese Antwort und speziell für die Erwähnung von *% interpolation und # {...} interpolation sind zwei verschiedene Arten von Spaß *. –

+0

Danke für die Antwort! – user2493615

2

Ich denke, das ist klar - zumindest Ihre Variablennamen machen Sinn. Ein Purist könnte sagen, Sie sollten es zu einer Methode extrahieren - aber wirklich - YAGNI (Sie werden es nicht brauchen) gilt auch für Rubin.

Wenn Sie es auf einem zweiten Platz machen müssen, dann würde ich es eine Methode machen. Du hast schon darüber nachgedacht.

+0

Direkt an. Ich habe mich nur gefragt, ob es ein Tabu gibt. – user2493615

5

Dies ist ein Meinungsstück: ja und nein.

Wenn es "komplex" ist, gehört es wahrscheinlich woanders hin. Wenn es "einfach" ist, ist es kein Problem.

Es kommt alles auf Lesbarkeit, Wartbarkeit, angemessene Wiederverwendung, und nichts Dummes tun.


1. Für Werte von "komplexen" variiert. 2. Für variierende Werte von "einfach".

1

Offensichtlich ist dies umstritten, wie andere Antwortzustände.

Ein Fall, in dem Sie Operationen definitiv extrahieren sollten, ist, wenn sie Nebenwirkungen haben.

Solange die Expression referentiell transparent ist, ist es nur Geschmackssache und subjektive Lesbarkeit.

+0

Was meinst du mit "wenn sie Nebenwirkungen haben"? – user2493615

+0

http://en.wikipedia.org/wiki/Side_effect_(computer_science) – samuil

Verwandte Themen