Was ist Groovy?
Groovy (2003, James Strachan; heute Apache Groovy) ist eine dynamische Sprache für die Java Virtual Machine. Sie ist fast eine Obermenge von Java – gültiger Java-Code läuft oft unverändert –, aber deutlich knapper: keine Semikolons, keine Typangaben nötig, Skripte ohne Klassen, Listen und Maps als Literale, Closures und eingebaute Vorlagen für Texte.
Groovy ist überall dort zu finden, wo die JVM-Welt automatisiert wird: Gradle-Build-Skripte (build.gradle), Jenkins-Pipelines (Jenkinsfile), Tests mit Spock, Web-Anwendungen mit Grails und Micronaut. Man kann Groovy dynamisch oder statisch typisiert verwenden (@CompileStatic).
Ausführen
groovy hallo.groovy # Skript ausführen
groovy -e 'println 1 + 2' # Einzeiler
groovysh # interaktive Konsole
groovyc Hallo.groovy # zu .class übersetzen
sdk install groovy # Installation mit SDKMAN!Das erste Programm
println "Hallo, Welt!"
println("1 + 2 = ${1 + 2}")
print "ohne Zeilenumbruch"
println ""
def name = "Mia"
println "Hallo, $name! Dein Name hat ${name.length()} Buchstaben."
println 'Einfache Anführungszeichen ersetzen nichts: $name'
println """Mehrzeiliger
Text mit ${name}"""Hallo, Welt! 1 + 2 = 3 ohne Zeilenumbruch Hallo, Mia! Dein Name hat 3 Buchstaben. Einfache Anführungszeichen ersetzen nichts: $name Mehrzeiliger Text mit Mia
println braucht keine Klammern. In doppelten Anführungszeichen ersetzt Groovy $name und ${ausdruck} (GString), in einfachen nicht.
Variablen und Typen
def deklariert eine Variable ohne festen Typ; man kann auch Typen angeben:
def alter = 17
int punkte = 100
double preis = 9.99
String name = "Mia"
boolean ok = true
char z = 'z'
def groß = 9_000_000_000L
def dezimal = 1.5 // BigDecimal!
def liste = [1, 2, 3]
def map = [a: 1, b: 2]
println "${alter.getClass().simpleName} ${punkte.getClass().simpleName} ${preis.getClass().simpleName}"
println "${name.getClass().simpleName} ${ok.getClass().simpleName} ${z.getClass().simpleName} ${groß.getClass().simpleName}"
println "${dezimal.getClass().simpleName} ${liste.getClass().simpleName} ${map.getClass().simpleName}"
alter = "jetzt ein String" // def erlaubt Typwechsel
println alter.getClass().simpleName
println 0.1 + 0.2 // BigDecimal rechnet exakt
println 0.1d + 0.2dInteger Integer Double String Boolean Character Long BigDecimal ArrayList LinkedHashMap String 0.3 0.30000000000000004
Rechnen
println 7 + 2
println 7 - 2
println 7 * 2
println 7 / 2 // Groovy: Division liefert BigDecimal 3.5
println 7.intdiv(2) // Ganzzahldivision
println 7 % 3
println 2 ** 10
println Math.sqrt(16)
println 10.power(3)
println((-7).abs())
println 3.7.round()
println Math.ceil(3.2)
println Math.max(3, 9)
println 5 <=> 3 // Raumschiff-Operator
println 5.compareTo(9)
def x = 5
x += 3; x *= 2; x++
println x
println 1_000 * 1_000
println 1000000000 * 1000000000L9 5 14 3.5 3 1 1024 4.0 1000 7 4 4.0 9 1 -1 17 1000000 1000000000000000000
So führst du den Code aus: Datei hallo.groovy speichern und mit groovy hallo.groovy ausführen (Apache Groovy 4 von groovy-lang.org, benötigt Java).
Merke
- Groovy läuft auf der JVM und ist weitgehend mit Java kompatibel
deffür dynamische Variablen, Typen sind optional; Semikolons und Klammern oft überflüssig- Doppelte Anführungszeichen erlauben
${...}(GString) 7 / 2ergibt3.5;intdivliefert die Ganzzahldivision
Aufgabe
Gib mit einem GString eine Zeile Mia ist 17 Jahre alt aus, wobei Name und Alter Variablen sind.