Erste Schritte | ↑ Inhalt | → Objekte

Wenn Sie sich mit Java schon etwas auskennen, stellt es für Sie kein großes Problem dar, ein Groovy-Programm zu schreiben. Trotzdem gibt es aber einige kleine und feine Unterschiede in der Syntax und einige nicht ganz unerhebliche Differenzen in der Semantik der beiden Sprachen, die man kennen muss, um von Java her kommend sinnvoll mit Groovy arbeiten zu können. Neben diesen Unterschieden zwischen Groovy und Java wollen wir einige wesentliche Sprachelemente vorstellen, die nicht von Java her bekannt sind, um das Verständnis der folgenden Kapitel zu erleichtern. Diese neuen Dinge können hier jedoch nur angerissen werden, um Ihnen einen ersten Eindruck zu vermitteln; spätere Kapitel gehen dann vollständiger und ausführlicher auf sie ein.

Warum ist Groovy anders?

Die Unterschiede zwischen den Sprachen Groovy und Java lassen sich durch drei Prinzipien kennzeichnen:

Weniger Code –- weniger Arbeit. Groovy-Programme sind fast immer deutlich kürzer als Java-Programme mit derselben Funktionalität. Dies wird dadurch erreicht, dass in Groovy vieles einfach weggelassen werden kann, was ohnehin klar ist. Beispiele hierfür sind die Klassendeklaration und die main()-Methode in einem einfachen Skript oder die Getter und Setter in Bean-Klassen. Daneben gibt es in Groovy eine Reihe neuer, mächtigerer Sprachkonstrukte und raffinierter APIs, die es ermöglichen, mit weniger Code mehr zu erreichen als in Java.

Übersichtlichere Programme. Wenn Sie Teile des Programmcodes einfach weglassen können, weil sie der Compiler auch so versteht, hat dies die angenehme Nebenwirkung, dass die Programme viel besser lesbar werden. Ein Beispiel hierfür sind die Getter- und Setter-Methoden, die Sie in Java der Konvention folgend für jedes von außen sichtbare Feld einer Klasse schreiben, und die in Groovy entfallen können, wenn sie keine zusätzliche Funktionalität außer dem Setzen oder Auslesen eines korrespondierenden Feldes haben. Das befreit den Code von Ballast und erleichtert es, den fachlichen Gehalt des Codes zu erkennen.

Größtmögliche Erwartungskonformität (Principle of least surprise). Diesem Prinzip zufolge, das im Zusammenhang mit der Programmiersprache Ruby bekannt geworden ist, soll das Programm das tun, was Sie von ihm erwarten, und Sie nicht mit überraschenden Ergebnissen konfrontieren – was in der Regel Fehler sind. Hierzu zwei Beispiele:

  • In Groovy hat der Ausdruck "abc".toUpperCase()=="ABC" den Wert true, während er in Java false ist (da Java hier auf Objektidentität prüft und nicht auf Gleichheit).
  • Groovy berechnet bei der Formel 1.3+0.4 den Wert 1.7, während Java auf 1.7000000000000002 kommt. Java arbeitet mit Fließkommazahlen, Groovy dagegen standardmäßig mit Dezimalzahlen (java.lang.BigInteger und java.lang.BigDecimal).

Das Prinzip der größtmöglichen Erwartungskonformität hat allerdings einen wesentlichen Nachteil: Es ist vom Betrachter abhängig. Einen erfahrenen Java-Programmierer wird das Verhalten eines Java-Programms in den beiden genannten Fällen nicht überraschen; im Gegenteil wird er sich wundern, dass man mit == die Gleichheit von String-Inhalten abfragen kann. Yukihiro Matsumoto, der Erfinder von Ruby, hat einmal davon gesprochen, dass die größtmögliche Erwartungskonformität bei Ruby sich auf seine Erwartungen bezieht, denn die Erwartungen aller möglichen Programmierer kann er nicht kennen. Und so ist es sicher auch hier: Groovy-Programme verhalten sich so, wie es die Entwickler dieser Sprache es für sinnvoll erachten und nicht unbedingt so, wie Sie es erwarten.

Kapitelinhalt

Bearbeiten


Erste Schritte | ↑ Inhalt | → Objekte