Groovy

Lesezeit: 6 Minuten

Groovy ist eine optional typisierte Programmiersprache auf der Java-Plattform und unterstützt objektorientierte, prozedurale, funktionale und aspektorientierte Programmierung. James Strachan kündigte Groovy im Jahr 2003 an. 2004 wurde die Sprache im JSR 241 (Java Specification Request) standardisiert. Die Version 1.0 erschien im Jahr 2007, Strachan hatte das Projekt jedoch kurz zuvor wieder verlassen.

Groovy wurde im Jahr 2008 von SpringSource aufgekauft, dem Unternehmen der Gründer des Spring Frameworks. Seit 2009 gehört SpringSource zu VMware, die wiederum mit Dell EMC 2012 das Joint Venture Pivotal Software gründeten, welches bis 2015 Sponsor von Groovy war.

Groovy ist seit 2015 ein Projekt der Apache Software Foundation (ASF).

Alleinstellungsmerkmale

James Strachan hat einem Blogbeitrag aus dem Jahr 2003 nach Groovy aus der Motivation heraus entwickelt, den zeitlichen Aufwand für das Schreiben von Unit-Tests und Skripten in Java zu verringern. Die Sprache sollte weitestgehend mit Java kompatibel sein, sowohl statische als auch dynamische Typisierung bieten und dabei die Vorteile dynamischer Skriptsprachen wie Python und Ruby nutzen, um deutlich schlankeren Code schreiben zu können und die Produktivität zu erhöhen.

Groovy ist eine Sprache, die auf der Java-Plattform läuft, mit Java-Code interagieren kann und mit der sich viele Anforderungen mit weniger Code umsetzen lassen, als es mit Java möglich ist.

Einsatzbereiche

Groovy ist die Standard-Skriptsprache in Jenkins und JMeter. Gradle ist in Groovy (und Java) geschrieben und bildet die Konfiguration als ausführbares Gradle-Skript ab. Grails, angelehnt an Ruby on Rails, ist ein Webframework für Groovy.

Laut der Groovy-Webseite setzen unter anderem folgende Unternehmen intern Groovy ein: Airbus, Best Buy, Cisco, Google, IBM, Linkedin, MasterCard, Nestle, Netflix, Oracle, Sky, Sony, Vodafone, Wallmart.

Pros

Groovy ist eine leicht zu erlernende, sehr flexible Programmiersprache mit fast uneingeschränkter Interoperabilität zu Java. Populäre Java-Frameworks wie Spring und Hibernate können problemlos in Groovy eingesetzt werden.

Groovy bietet native Arrays und Maps (assoziative Arrays), Ranges und reguläre Ausdrücke. Groovy beherrscht Multi-Line-Strings, String Interpolation, Lambdas und erlaubt eine einfache Handhabung von BigDecimals. Groovy ermöglicht Monkeypatching und kann Getter und Setter implizit erzeugen. Groovy kennt Default-Parameter und die Typangabe kann bei Methodenparametern und Rückgabewerten entfallen. Traits, Interfaces mit Zustand, sind ein weiteres Feature von Groovy. Der Safety-Operator kann den Zugriff auf Felder und Methoden gegen Null Pointer Exceptions absichern. Support für verschiedene Markup-Sprachen, wie HTML und XML, ist Teil der Standardbibliothek.

Analog zu Ruby erlaubt auch Groovy das Weglassen der runden Klammern und Punkte unter bestimmten Umständen, wodurch die Sprache zur Entwicklung domänenspezifischer Sprachen (DSL) sehr gut geeignet ist.

Cons

Groovy läuft auf der JVM und ist daher vorwiegend für Java-Entwickler interessant bzw. in Bereichen, in denen Java und die JVM zum Einsatz kommen. Da Java stark typisiert und überwiegend objektorientiert ist, kann sich die Dynamik von Groovy abschreckend auf Java-Entwickler auswirken.

In Umfeldern, wo Java keine Rolle spielt, bietet Groovy keine signifikanten Vorteile gegenüber Sprachen wie Python und Ruby und dürfte Schwierigkeiten haben, in einem Entscheidungsprozess für eine dynamische Sprache als Sieger hervorzugehen. Hinzu kommt die geringe Popularität von Groovy, die ohne die Unterstützung weit verbreiteter Werkzeuge wie Jenkins und Gradle sicherlich noch geringer wäre. Eine Stichprobe in einem deutschen Jobportal ergab 50 mal mehr Stellenanzeigen für Java– als für Groovy-Entwickler.

Groovy ist seit 2003 in Entwicklung. Seitdem hat sich auch in Java viel getan: Typinferenz, Lambdas, Default Methods in Interfaces, Multi-Line-Strings (seit Java 13 als Preview) und mit Lombok automatische Getter/Setter gibt es nun auch in Java. Erweiterungen in der Java-Standardbibliothek, wie List.of() oder java.nio.file.Files erlauben eine kompaktere Schreibweise bestimmter Befehle, wodurch der Vorsprung von Groovy gegenüber Java heute nicht mehr so groß ist, wie in seiner Anfangszeit.

Wie vor allem auch in Ruby kann es in Groovy leicht passieren, schwer lesbaren Code zu produzieren, wenn man von der Vielseitigkeit der Sprache zu sehr Gebrauch macht. Ein einheitlicher Programmierstil und ein gutes Verständnis von der Sprache können dem entgegenwirken.

Groovy hatte in seiner Anfangszeit starke Performanceprobleme, was seit der Einführung von InvokeDynamic (siehe Link am Ende des Beitrags) Geschichte ist. Mittlerweile ist die Performance von Groovy annähernd so gut wie die von Java.

Datenblatt

NameGroovy
Webseitehttps://groovy-lang.org/
Erscheinungsjahr2003
Aktuellste Version (Stand 18. Juli 2021)Version 3.0.8 vom 16. April 2021
Typisierungdynamisch und statisch
Paradigmenimperativ
prozedural
objektorientiert
funktional
aspektorientiert
ProsCons
einfacher Einstiegaußerhalb des Java-Universums kaum Vorteile gegenüber anderen dynamischen Sprachen
extrem flexibelgeringe Verbreitung abseits von Jenkins und Gradle
hervorragende Interoperabilität mit Javainkonsistenter Programmierstil kann schnell zu schwer lesbarem Code führen
native Unterstützung für Arrays, Maps, Ranges und reguläre AusdrückeVorteile gegenüber Java heute nicht mehr stark wie in der Anfangszeit von Groovy
Lambdas, optionale Typisierung, String Interpolation, Traits, implizite Getter/Setter, Monkeypatching, einfache BigDecimal-Berechnungen
gute geeignet für die Entwicklung domänenspezifischer Sprachen

virtuallet

virtuallet ist ein kleines Programm von mir, welches ich in diversen Programmiersprachen implementiert habe. Hier geht es direkt zum Groovy-Code von virtuallet auf GitLab. Hier gibt es weitere Infos zu virtuallet.

- Ankündigung von Groovy als neue JVM-Sprache
- Einführung in InvokeDynamic
- Wissenschaftliche Publikation über die Geschichte von Groovy von Paul King