Operatoren und Besonderheiten
| Konzept | Groovy |
|---|---|
| Variable | def x = 1 |
| GString | "Wert: ${x}" |
| Liste / Map | [1, 2] / [a: 1] |
| Range | 1..5, 1..<5 |
| Closure | { x -> x * 2 } |
| Elvis | a ?: b |
| Sicherer Zugriff | obj?.feld |
| Spread | liste*.methode() |
| Raumschiff | a <=> b |
| Regex-Match | text =~ /muster/ |
| Potenz | 2 ** 10 |
| Ganzzahldivision | 7.intdiv(2) |
def zeile = { String a, String b -> println "${a.padRight(18)} $b" }
zeile("1 + 1", "${1 + 1}")
zeile("'a' * 3", "${'a' * 3}")
zeile("[1,2,3].sum()", "${[1, 2, 3].sum()}")
zeile("(1..4).sum()", "${(1..4).sum()}")
zeile("null?.size()", "${null?.size()}")
zeile("0 ?: 'leer'", "${0 ?: 'leer'}")
zeile("[3,1,2].sort()", "${[3, 1, 2].sort()}")
zeile("'abc'[1]", "${'abc'[1]}")
zeile("1.0 == 1", "${1.0 == 1}")
zeile("'a'.equals('a')", "${'a'.equals('a')}")
zeile("'a'.is('a')", "${'a'.is('a')}")
zeile("[1,2] == [1,2]", "${[1, 2] == [1, 2]}")
zeile("5 in 1..10", "${5 in 1..10}")
zeile("[a:1].a", "${[a: 1].a}")
zeile("Integer.MAX_VALUE", "${Integer.MAX_VALUE}")Ausgabe
1 + 1 2
'a' * 3 aaa
[1,2,3].sum() 6
(1..4).sum() 10
null?.size() null
0 ?: 'leer' leer
[3,1,2].sort() [1, 2, 3]
'abc'[1] b
1.0 == 1 true
'a'.equals('a') true
'a'.is('a') true
[1,2] == [1,2] true
5 in 1..10 true
[a:1].a 1
Integer.MAX_VALUE 2147483647Typische Fehler
def x = null
println x.length()Fehlermeldung
Cannot invoke method length() on null object
println unbekannteVariableFehlermeldung
No such property: unbekannteVariable
Weiterführende Quellen
- groovy-lang.org/documentation: offizielle Dokumentation
- „Groovy in Action“ (Koenig u. a.)
- Gradle- und Jenkins-Handbücher für den Praxiseinsatz
- Spock (spockframework.org) für lesbare Tests
Merke
- Groovy = Java mit Skript-Komfort: Closures, Collections, DSLs, Metaprogrammierung
- Dynamisch und statisch einsetzbar; perfekt für Build- und Automatisierungsskripte
- Gradle, Jenkins, Spock und Grails sind die wichtigsten Anwendungen
Aufgabe
Schreibe ein Jenkins-ähnliches Pipeline-DSL mit stage("Name") { ... }.