EMZETT.
Login

Kurz: 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.

Teil des Kurses Groovy

Kapitel 1 von 8 im Kurs Groovy. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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}"""

Ausgabe:

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.2d

Ausgabe:

Integer 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 * 1000000000L

Ausgabe:

9
5
14
3.5
3
1
1024
4.0
1000
7
4
4.0
9
1
-1
17
1000000
1000000000000000000

Merke

  • Groovy läuft auf der JVM und ist weitgehend mit Java kompatibel
  • def für dynamische Variablen, Typen sind optional; Semikolons und Klammern oft überflüssig
  • Doppelte Anführungszeichen erlauben ${...} (GString)
  • 7 / 2 ergibt 3.5; intdiv liefert die Ganzzahldivision

Übungsaufgabe

Gib mit einem GString eine Zeile Mia ist 17 Jahre alt aus, wobei Name und Alter Variablen sind.

Quiz zur Selbstkontrolle

Weiter im Kurs

Weiter: Kontrollfluss, Methoden und Closures

Alle Kapitel: Groovy im Überblick