Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Apache Groovy #10 – Closures

Posted on 28. September 202229. April 2023 by Stefan Draeger

In diesem Beitrag möchte ich dir gerne die Closures von Apache Groovy zeigen und was du mit diesem Sprachkonstrukt in deinem Code bewerkstelligen kannst.

Apache Groovy #10 - Closures
Apache Groovy #10 – Closures

  • Was sind Closures?
  • Ein kleines Beispiel von Apache Groovy Closures
  • Parameter definieren
    • Eine Closure mit expliziten Parameter
    • Closure mit impliziten Parameter
    • Default Werte an Parameter
  • Multimethoden mit Closures
  • Quellenangaben

Was sind Closures?

Eine Closure ist eine Hülle für ein Stück Code, ähnlich wie eine Funktion, jedoch hat diese keinen Namen und kann nur einer Variable zugeordnet werden.

Einer Closure kannst du Parameter übergeben und auch ein Ergebnis aus dieser erhalten, ganz wie mit einer Funktion, und auch der Aufruf ist sehr ähnlich, jedoch bist du mit diesem Konstrukt deutlich flexibler und kannst einzelne Funktionen während der Laufzeit austauschen (aber dazu später mehr).

Ein kleines Beispiel von Apache Groovy Closures

Hier zunächst ein kleines Beispiel mit der Erzeugung und dem Aufruf einer Closure in Apache Groovy.

Für alle nachfolgenden Beispiele verwende ich die GroovyConsole, diese ist für die gezeigten Beispiele ausreichend. Du kannst natürlich auch eine „richtige“ Entwicklungsumgebung wie die Eclipse IDE verwenden, wie du diese einrichtest, habe ich im Beitrag Einrichten von Eclipse zum Entwickeln in Apache Groovy ausführlich erläutert.

/**
 definieren einer Variable und zuweisen einer Closure
 innerhalb der geschweiften Klammer rufen wir
 hier nur die Funktion println auf und geben den Text 
 Hello World! aus.
**/
def var1 = {println("Hello World!")}

/**
 Aufruf der Variable und ausführen 
 des Codes innerhalb der Closure
**/
var1()

Ausgabe in der GroovyConsole:

groovy> /** 
groovy>  definieren einer Variable und zuweisen einer Closure 
groovy>  innerhalb der geschweiften Klammer rufen wir 
groovy>  hier nur die Funktion println auf und geben den Text  
groovy>  Hello World! aus. 
groovy> **/ 
groovy> def var1 = {println("Hello World!")} 
groovy> /** 
groovy>  Aufruf der Variable und ausführen  
groovy>  des Codes innerhalb der Closure 
groovy> **/ 
groovy> var1() 
 
Hello World!

Du kannst alternativ auf die Closure mit der Funktion „call()“ aufrufen, das Ergebnis ist in diesem Fall dasselbe.

Parameter definieren

Wie bereits erwähnt verhält sich das Konstrukt wie eine Funktion und einer Funktion können wir beliebige (und auch beliebig viele) Parameter zuweisen. Wobei wir diesen Parametern default Werte zuweisen können und diese dann auch nicht übergeben müssen.

Im nachfolgenden möchte ich dir nun zeigen wie du eine Closure mit explizieten und implizieten Parametern schreibst und diese aufrufen kannst.

Eine Closure mit expliziten Parameter

Ein expliziter Parameter in einer Closure ist daran zu erkennen, dass dieser einen Namen trägt und am Anfang benannt wird.

Im nachfolgenden Beispiel übergebe ich den Vornamen (firstname) und den Nachnamen (lastname) um diesen dann zusammenzufügen und über die Funktion println auszugeben.

def var1 = {firstname, lastname -> println(firstname + " " + lastname)}

var1.call("Stefan", "Draeger")

Ausgabe in der GroovyConsole:

groovy> def var1 = {firstname, lastname -> println(firstname + " " + lastname)} 
groovy> var1.call("Stefan", "Draeger") 
 
Stefan Draeger

Closure mit impliziten Parameter

Wenn du einer Closure keine Parameter übergibst, dann hast du trotzdem den impliziten Parameter „it“. Diesen kannst du wie folgt innerhalb deines Konstrukts verwenden:

def var1 = {println(it)}

var1.call("Hallo Welt!")

Ausgabe in der GroovyConsole:

groovy> def var1 = {println(it)} 
groovy> var1.call("Hallo Welt!") 
 
Hallo Welt!

Default Werte an Parameter

Den Parametern kannst du auch Default Werte geben und somit festlegen, welchen Wert diese einnehmen sollen, wenn diese nicht übergeben werden.

def var1 = {firstname="Max", lastname="Mustermann" -> println(firstname + " " + lastname)}

var1.call()

Ausgabe in der GroovyConsole:

groovy> def var1 = {firstname="Max", lastname="Mustermann" -> println(firstname + " " + lastname)} 
groovy> var1.call() 
 
Max Mustermann

Multimethoden mit Closures

Im ersten Beispiel haben wir ein einfaches „Hello World!“ mit der Funktion println ausgegeben, dieses können wir deutlich einfacher machen, indem wir vor der Funktion das & Zeichen setzen.

def var1 = System.out.&println

var1("Hello World!")

Wir delegieren also einfach unseren übergebenen Wert an die Funktion println weiter.

Ausgabe in der GroovyConsole:

groovy> def var1 = System.out.&println 
groovy> var1("Hello World!") 
 
Hello World!

Quellenangaben

Für diesen Beitrag habe ich mich aus den offizielen, englischen Dokumenten zur Sprache Apache Groovy bedient, so von einer Wiki-Seite.

  • https://groovy-lang.org/closures.html
  • https://de.wikibooks.org/wiki/Groovy:_Closures

1 thought on “Apache Groovy #10 – Closures”

  1. Corinna sagt:
    1. Oktober 2022 um 10:24 Uhr

    Besten Dank und schönes WE;)

    Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen
Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

link zu Fabook
link zu LinkedIn
link zu YouTube
link zu TikTok
link zu Pinterest
link zu Instagram
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}