Groovy Closures – Verwendung

Im letzten Blogeintrag zu Groovy-Closures habe ich eine kurze Einführung gegeben und ein paar Code-Beispiele implementiert. Nur bitte was macht denn nun Closures so interessant? Zum einen natürlich die syntaktische Eleganz, zum anderen bieten Closures Funktionen die Möglichkeit, einen Teil ihrer implementierten Logik zu delegieren. In Java verwendet man hierfür anonyme innere Klassen, die jedoch an ein Interface gebunden sind. Closures dagegen sind leichtgewichtiger und flexibler. In dem folgenden Beispiel wird für die if-Condition ein Closure verwendet, um bestimmte Zahlen zur Aufsummierung zu selektieren.

image

In der for-Schleife wird für jede Iteration die Closure aufgerufen, um bestimmte Zahlen zu selektieren. Damit wird der Selektionsprozess der totalSelectedValues Methode an die Closure delegiert. Dabei werden in der ersten Closure nur ungerade und in der zweiten Closure nur gerade Zahlen selektiert. By the way… bei diesem Beispiel handelt es sich um eine Form der Implementierung des Strategy-Design-Patterns.

Wie man bei den Closures erkennen kann, werden hier nicht explizit return-Values gesetzt. Hier gilt: der Wert der letzten Expression wird automatisch zum Aufrufer zurückgegeben selbst wenn es sich dabei um NULL handeln sollte. Im nächsten Beispiel implementiere ich eine Service-Klasse die ihre Berechnung an Cosures delegiert.

image

Wenn man eine neue Service-Instanz erstellt, dann übergibt man die Closure an den Konstruktor der Service-Klasse. Dabei wird die Closure in einer Member-Variable der Service-Klasse gespeichert und beim Aufruf der calculate Methode ausgeführt. Möchte man z.B.: die implementierte Closure wiederverwenden, dann könnte man sie auf irgendeine Art zwischenspeichern und später wieder an den Service übergeben.

image

Im nächsten Schritte möchte ich zeigen, wie man mehrere Argumente an Closures übergeben kann. Wie ich im Einführungs-Post erwähnt habe, ist der Default-Name für ein einziges, an die Closure übergebenes Argument, immer it. Solange man sicher ist, dass immer nur ein Argument übergeben wird, kann man it verwenden. Falls man mehrere Argumente übergibt, muss man diese mittels entsprechenden Namen referenzieren.

image

Die tellFortune Methode ruft die Closure mittels zwei Parametern auf, nämlich einer Date- und einer String-Instanz. Die Closure referenziert diese Parameter jeweils mit date und fortune. Das Symbol –> trennt dabei die Deklaration von Parametern vom eigentlichen Körper der Closure. Da Groovy optionale Typisierung unterstütz kann man auch entsprechende Typen im Deklarationsteil angeben.

image

Im nächsten Blogeintrag zu Closures werde ich die Anwendung des Execute Around Method Patterns und den Zusammenhang von Closures und Coroutines erklären.

Über sageniuz

https://about.me/ClausPolanka
Dieser Beitrag wurde unter Programming veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s