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
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 Miaprintln 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.2dAusgabe:
Integer Integer Double
String Boolean Character Long
BigDecimal ArrayList LinkedHashMap
String
0.3
0.30000000000000004Rechnen
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 * 1000000000LAusgabe:
9
5
14
3.5
3
1
1024
4.0
1000
7
4
4.0
9
1
-1
17
1000000
1000000000000000000Merke
- 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
Übungsaufgabe
Gib mit einem GString eine Zeile Mia ist 17 Jahre alt aus, wobei Name und Alter Variablen sind.
Quiz zur Selbstkontrolle
Worauf läuft Groovy?
- Auf der Java Virtual Machine (richtig)
- Auf .NET
- Auf BEAM
- Nativ ohne Laufzeit
Was bewirkt "${x}" in Groovy?
- Setzt den Wert von x in den String ein (richtig)
- Gibt den Text unverändert aus
- Startet einen Befehl
- Erzeugt eine Liste
Was ergibt 7 / 2 in Groovy?
- 3.5 (richtig)
- 3
- 4
- Einen Fehler
Weiter im Kurs
Weiter: Kontrollfluss, Methoden und Closures
Alle Kapitel: Groovy im Überblick