Verbesserte Performance
Das Entwicklerteam verspricht eine verbesserte Performance des Compilers um den Faktor 3-5, was besonders bei größeren Projekten deutlich wird. Die Performancesteigerung wird hauptsächlich durch Class Caches erreicht. Nicht nur der Compiler ist jetzt schneller, auch die Runtime hat einen deutlichen Schub bekommen. Gegenüber der Vorgängerversion soll sich die Performance zur Laufzeit um 150% - 460% verbessert haben. Als Basis dienten dem Groovy-Team diese Benchmarks.
Neben diesen Verbesserungen ist auch der Funktionumfang der Sprache deutlich erweitert worden. Neben Syntaxverbesserungen ist die Möglichkeit, so genannte AST-Transformationen durchzuführen, das größte – aber auch leistungsfähigste – Mittel, die volle Dynamik von Groovy auszunutzen.
"Eine eigene DSL - mit Groovy" - der ausführliche Artikel von Sebastian Barszczewski und Stephan Scharff
Mehrfache Zuweisung von Variablen
Wie in Java war es in Groovy bisher auch nur möglich, genau einer Variablen einen Wert zeitgleich zuzuweisen. In Groovy 1.6 lassen sich jetzt mehreren Variablenwerte zeitgleich zuweisen:
def (a, b) = [100, 200]assert a == 100assert b == 200
In diesem Beispiel werden den beiden Variablen a und b die Werte 100 und 200 zugewiesen. Das würde man in Java und Groovy 1.5 mit 2 separaten Zuweisungen machen. Dieses neue Feature ist so noch nicht besonders spannend. Anders sieht es in dem folgenden Beispiel aus:
def exchange(double amount1, double amount2){//Errechnet den Wechselkurs und gibt z.B. [1.23, 2.45] zurück}def (rate1, rate2) = exchange(v1, v2)assert rate1 == 1.23assert rate2 == 2.45
Dadurch, dass die Zuweisung mit einer Liste erfolgt, ergeben sich viele Möglichkeiten, diese Zuweisung dynamisch zu gestalten.
def (vorname, nachname) = „Thorsten Kamann“.tokenize()assert vorname == „Thorsten“assert nachname == „Kamann“
Stimmen die Anzahl der Variablen und der Elemente der Liste nicht überein, ist dies auch kein Problem:
def (a, b, c) = [1, 2]assert a == 1assert b == 2assert c == null
Optionales Return-Statement in If-else- und Try-catch-Konstrukten
Seit der Version 1.6 sind Return-Statements für die beiden Konstrukte optional. Dies war in Closures und Methoden schon immer der Fall. Dies wurde für die beiden Konstrukte konsequenterweise erweitert. Allerdings muss der gewünschte Rückgabewert die letzte Expression des If-else- oder Try-catch-Konstrukts sein.
def method(){if (true) 1 else 0}assert method() == 1
Ähnlich sieht es bei einem Try-catch-Block aus:
def method(){try{if (true) throw Exception()1}catch (e){2}finally{3}}assert method() == 2
In diesem Beispiel wird eine Exception geworfen und die letzte Expression der throw-Clause als Return-Statement interpretiert. Wichtig hierbei ist, dass dieses Feature nicht für Finally-Statements gilt.




