O'Reilly logo

Groovy: Grundlagen und fortgeschrittene Techniken by Joachim Baumann

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

59
4 Sprachgrundlagen
In diesem Kapitel lernen Sie die Grundlagen der Sprache Groovy ken-
nen. Mit diesem Wissen werden Sie bereits eigene Skripte und Pro-
gramme schreiben können. Sie sollten Kapitel 3 gelesen und Groovy
installiert haben, um die Beispiele praktisch nachvollziehen zu können.
In diesem Kapitel finden Sie die Eigenschaften von Groovy, die Sie im
täglichen Leben am häufigsten benötigen werden. Hierzu gehören
Unterschiede zu Java, Datentypen wie Lists, Maps und Ranges, Kon-
trollstrukturen sowie die Verwendung regulärer Ausdrücke.
4.1 Java: Wichtige Gemeinsamkeiten und Unterschiede
Groovy ist Java zwar sehr ähnlich, stellt aber nicht einfach eine Ober-
menge von Java dar. Es gibt so viele Gemeinsamkeiten mit Java, dass
man sehr häufig vergisst, dass die verwendete Programmiersprache
Groovy und nicht Java ist. Es gibt allerdings auch (wenige) Java-Kon-
strukte, die von Groovy nicht direkt unterstützt werden.
4.1.1 Kommentare
Wie in Java
Kommentare haben die gleiche Form wie in Java. Es gibt zum einen
Kommentare, die sich nur über den Rest der laufenden Zeile erstre-
cken. Diese werden mit der Zeichenfolge
// eingeleitet. Mehrzeilige
Kommentare werden wie in Java durch die Zeichenfolge
/* gestartet
und durch
*/ beendet.
8ENNIM'OLGENDENVON(ROOVY1ROGRAMMENDIE3EDEISTDANNSIND
SOWOHL(ROOVY,LASSENALSAUCH(ROOVY4KRIPTEGEMEINT%IE%IFFEREN
ZIERUNG ZWISCHEN DIESEN BEIDEN "RTEN VON 1ROGRAMMEN NEHMEN WIR
SPhTERVOR
Eine Anmerkung
4 Sprachgrundlagen60
Listing 4–1
Verschiedene
Möglichkeiten der
Kommentierung
x = 5 // einzeiliger Kommentar, Rest der Zeile
// Einzeiliger Kommentar am Beginn einer Zeile
/*
* Dies ist gleichfalls ein
* mehrzeiliger Kommentar
*/
Die in der Abbildung gezeigte Variante der mehrzeiligen Kommentie-
rung – jeweils mit dem Zeichen
* eingeleitet – gefällt mir am besten, ist
aber genau wie in Java keine Pflicht.
Groovy-Doc in
Vorbereitung
Aktuell gibt es kein Groovy-Doc, das – vergleichbar mit Java-Doc
– aus Groovy-Programmen die API-Dokumentation extrahiert. Diese
ist aber in Arbeit, so dass in nächster Zeit zusätzlich Groovy-Docs
möglich sein werden. Die Syntax wird hierbei die gleiche sein wie bei
Java-Docs, also eingeleitet durch die Zeichenfolge
/** und beendet
durch
*/.
4.1.2 Namensraumunterstützung
Java bietet mit seinem Package-Mechanismus, der auf Verzeichnisse
abgebildet wird, eine einfache Art der Hierarchisierung von Namens-
räumen an. Dieser Mechanismus wird in Groovy vollständig unter-
stützt.
Listing 4–2
Definition des Packages
und Verwendung der
Import-Anweisung
package de.groovybuch.kap4
import java.net.*
Ein Groovy-Programm befindet sich immer in einem Package. Wenn
kein Package mit der package-Anweisung deklariert wird, dann wird
das Default-Package benutzt.
Import-Anweisung
Groovy unterstützt genau wie Java die import-Anweisung, über die
Groovy- oder Java-Klassen im aktuellen Quelltext bekannt gemacht
werden können. Auch die Syntax der
import-Anweisungen ist exakt
wie in Java.
Static Imports
Auch die in Java mit der Version 1.5 eingeführten statischen
Imports werden von Groovy voll unterstützt, und dies sogar zusam-
men mit der Version 1.4 von Java.
Listing 4–3
Statische Imports mit
Groovy
package de.groovybuch.kap4
import static java.lang.Math.*
println cos(2*PI)
614.1 Java: Wichtige Gemeinsamkeiten und Unterschiede
Beispiel
In Listing 4–3 führen wir zuerst den statischen Import aller Methoden
und Konstanten aus
java.lang.Math durch und können dann direkt
auf diese zugreifen, wie die Berechnung des Cosinus zeigt.
4.1.3 Closures (Methoden erster und höherer Ordnung)
In Java gibt es keine Möglichkeit, Methoden oder auch Anweisungs-
blöcke als eigenständige Objekte zu behandeln. Wir sind aber im nor-
malen Programmiererleben des Öfteren mit dem Problem konfron-
tiert, eine Funktionalität zur Verfügung zu stellen, ohne dass wir
deshalb gleich eine neue Klasse und ein Objekt dieser Klasse erzeugen
wollen.
Ein klassisches Beispiel für eine derartige Verwendung sind die ver-
schiedenen Listener-Interfaces und Adapterklassen in Swing. Fast alle
Reaktionen auf Ereignisse in der Kommunikation mit dem Benutzer
müssen über die Implementierung dieser Interfaces geschehen.
Anonyme innere Klassen
Java bietet hier als Implementierungsunterstützung innere Klassen
und hier insbesondere die anonyme innere Klasse, die eine syntaktisch
nicht unbedingt ansprechende Form der Spezifikation derartiger Funk-
tionalität ermöglicht.
Es gibt aber auch das Konzept der Closures oder Methoden erster
bzw. höherer Ordnung, das deutlich weiter gehende Möglichkeiten
bietet. Das Konzept stammt aus dem Bereich der funktionalen Pro-
grammierung und wird dort sehr verbreitet eingesetzt. Eine Methode
erster Ordnung ist hierbei ein eigenständiges Objekt, das wie jedes
andere referenziert werden kann. Eine Methode höherer Ordnung ist
eine Methode, die zusätzlich noch Methoden erster oder höherer Ord-
nung als Parameter erlaubt.
Closures in Groovy
Groovy unterstützt Closures, und sie sind allgegenwärtig. In der
einfachsten Variante ist eine Closure eine Funktion, die Parameter
erhält und ein Resultat zurückliefert. Closures ersetzen damit in fast
allen Fällen innere Klassen und sind zudem eleganter.
In dieser einfachsten Variante entspricht eine Closure einem
Anweisungsblock, den wir referenzieren können. Die Closure ist dabei
ein eigenständiges Objekt und kann deshalb einer Variablen zugewie-
sen werden oder kann als Parameter bei einem Methodenaufruf ver-
wendet werden.
Listing 4–4
Die Definition einer
Closure
{ parameter, durch, Komma, getrennt ->
// Quelltext der Closure
}

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required