2.9 KiB
Schlüsselwörter
-
Folgende Schlüsselwörter gibt es in Groovy:
Diese Wörter (und auch die Bezeichner für die Datentypen) dürfen im allgemeinen, wie in vielen anderen Sprachen nicht als Variablennamen benutzt werden. Jedoch gibt es in Groovy einen Weg dies zu umgehen:
def "this"(){print "Diese Methode hat den Namen \'this\' } //-> "Diese Methode hat den Namen 'this'"
Hierbei muss man den Methodennamen in Anführungszeichen setzen. Ein Methodenaufruf würde dann wie folgt aussehen:
this.this(); //(Es wird angenommen das Objekt ruft selbst die Methode auf)
Es wird jedoch stark davon abgeraten dieses Groovy - Feature zu benutzen, da es in den meisten Fällen keine Vorteile bietet und nur für Verwirrung sorgt.
Kontextuelle Schlüsselwörter:
- as
- in
- def
- permitsrecord
- sealed
- trait
- var
- yields
Da diese Schlüsselwörter in weder in Java, noch in früheren Groovy Versionen existierten, kann man sie für Variablen- / Methodennamen benutzen, ohne sich des oben gezeigten Tricks bedienen zu müssen. Es wird empfohlen beim Aufrufen dieser Methoden / beim Zugriff auf diese Variablen ein "this." davorzusetzen, damit es nicht Verwirrungen kommt. Am besten lässt man es jedoch direkt sein und überlegt sich andere Namen.
Das Schlüsselwort "def":
Eines der wichtigsten Groovy-Features ist die dynamische Typisierung. Ihr bester Freund wird hier das Schlüsselwort "def" sein. Es wird benutzt, um eine Variable oder eine Methode zu definieren, ohne hierbei den Typ explizit angeben zu müssen. Würden wir in Java z.B. folgendes versuchen:
public class MyClass {
public static void main(String args[]) {
int a = 5;
a = "Hallo";
System.out.println(a);
}
}
Dann würden wir folgende Ausgabe erhalten:
MyClass.java:4: error: incompatible types: String cannot be converted to int
a = "Hallo";
^
1 error
In Groovy gibt es für genau solche Fälle jedoch das Schlüsselwort "def". Folgendes ist also in Groovy möglich:
def a = 10
a = "Hallo"
println a // Ausgabe: Hallo
Dieses Feature kann vor allem bei Methoden nützlich sein, bei denen man sich noch nicht auf einen Rückgabewert festgelegt hat. So ist es also möglich, dass eine Methode in einem Fall eine Zahl zurückgibt, in einem anderen Fall jedoch einen String. Folgendes Beispiel verdeutlicht das ganze nochmal:
def divide(x, y){
if (y == 0) {
return "Keine Division durch 0 erlaubt!"
}
x/y
}
println divide(6,3) //Ausgabe: class java.math.BigDecimal
println divide(1,0) //Ausgabe: class java.lang.String
Wie sie vielleicht bemerkt haben, wurde bei diesem Beispiel absichtlich auf die Angabe von Typen bei den Methodenparametern verzichtet. Groovy erlaubt es einem nämlich auch hier auf die explizite Angabe von Typen zu verzichten.