Groovy : Closures oder Methoden
Ich habe in die Gewohnheit, mit Verschlüssen überall kann ich statt der regulären Methoden, auch wenn ich nicht muss Zugang zu freien Variablen. Also, werde ich dieses verwenden:
def addNumbers = { left, right -> left + right }
.. statt dieser:
def addNumbers (left,right) { left + right }
Ist diese schlechte Praxis? Ich bevorzugen die zusätzliche Leistung bekomme ich bei der Verwendung von Verschlüssen über Methoden, und ich bevorzugen die syntax.
Dank!
- Denken Sie nur daran, dass man nicht einfach festlegen, Rückgabe Verschluss. Für Methoden ist es viel einfacher. Auch die Verschlüsse nicht gut mit
@TypeChecked
oder@CompileStatic
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nur verwenden, Verschlüsse, wo ich Sie brauche, d.h. ich Methoden verwenden, indem default. Ich mache das, weil
Methoden sind einfacher als die der Schließungen. Verschlüsse haben eine Delegierte, ein Eigentümer, behalten Sie den Zugriff auf Variablen, die in Ihrem lokalen Bereich sein, wenn Sie (wie du es nennst, "freien Variablen"). Standardmäßig Methodenaufrufe innerhalb einer closure werden gelöst durch:
Aber diese Reihenfolge kann zur Laufzeit geändert werden, und eine Schließung als Delegierte können auch geändert werden, zu jedem Objekt.
Alle diese Faktoren zusammen können dazu führen, dass code, der verwendet Verschlüsse sehr schwierig sich zu grok, so dass, wenn Sie nicht benötigen diese Komplexität, die ich bevorzuge, um Sie zu beseitigen, indem Sie mit einer Methode, die statt
Ich habe keine Ahnung, ob die von mir befürwortete Praxis (Methoden standardmäßig und Schließungen nur dann, wenn Sie Sie brauchen) ist weithin als ein "best practice", also bin ich neugierig zu hören, was andere denken.
Während all die Dinge, die @Don sagt, wahr sind, weiß ich nicht, dass alle von Ihnen sind alles, was signifikant ist. Können Sie überschreiben, das delegieren von einer Schließung die Ausführung ändern können, aber es sei denn, Sie sind vorbei die Schließung um (was Sie nicht tun können, mit einer Methode sowieso), die Sie nicht wirklich Gedanken über alle diese Dinge geschehen. Spielen mit dem delegieren ist eine Funktion, nicht eine Haftung.
Als für einen möglichen Leistungseinbruch, von extra-Klasse-Dateien, warum sind Sie der Verwendung von Groovy-wenn Sie so besorgt über die Leistung?
Meine Meinung ist, dass es eigentlich egal ist. Wenn Sie eine Menge von Menschen in Ihrem team, die alten Java-Entwickler, sind Sie wahrscheinlich nicht zu mögen, wenn Sie Verschlüsse, wo eine Methode tun. Auf der anderen Seite, jemand der fließend in Groovy werden verärgert, wenn Sie den Krempel alles mit Methoden, wenn eine Schließung macht mehr Sinn.
tl;dr - Es gibt keine harte und schnelle Regel, sondern Sie sollten üben gutes Urteilsvermögen mit Blick auf die Lesbarkeit des Codes.
java.lang.ref.SoftReference
Instanzen. In regelmäßigen scripts und Klassen, ist das kein problem, aber in einigen besonderen Fällen (z.B. bei großen XML-Dateien zu behandelnMarkupBuilder
) sollten Sie vermeiden, mit Verschlüssen.