# Datentypen Groovy unterstützt alle eingebauten Datentypen von Java und hat zusätzlich eigene Datentypen & erweitere Funktionen, die die Sprache dynamischer und benutzerfreundlicher machen ### Primitive Datentypen ``` • Logisch - boolean zwei mögl. Werte: true und false • Ganzzahl – byte, short, int, long 8, 16, 32, 64 Bit vorzeichenbehaftete Ganzzahlen • Fliesskommazahlen – float, double 32 bzw. 64 Bit • Zeichen – char 16-Bit Unicode ``` Es entählt noch die eingebauten Datentypen `BigInteger` & `BigDecimal` sie müssen nicht zusätzlich importiert werden - zählen aber zu den koplexen Datentypen Beispiel ``` - für 'long' nutzt man L/l am Ende der Zahl - 100L - für 'float' nutzt man F/f - 3.14f - für 'BigInteger' nutzt man G/g - 34567890G - für 'BigDecimal' nutzt man G/g - 3.14159g ``` wenn man das Schlüsselwort `def` verwendet, muss der Variablentyp nicht angegeben werden. Das Programm erkennt autom. welchen Datentyp die Variable haben soll Wenn man z.B. eine grosse Zahl hat, wird der Typ automatisch an die grössere Zahl angepasst Beispiel ``` def a = 100 boolean isInteger = a Instance of Integer println(isInteger) //-> true ``` # Komplexe Datentypen ### Strings Man kann einen String auf verschiedene Arten definieren. Sie reichen von einfachen einzeiligen Strings ... Beispiel ``` def einfach = 'einfache Anführungszeichen' def doppelt = "doppelte Anführungszeichen" def slashy = /ein "Slashy String" ohne 'Escape'/ def dollar = $/weitere Möglichkeit und Einfügen von '/'/$ println(einfach) // einfache Anführungszeichen println(doppelt) // doppelte Anführungszeichen println(slashy) // ein "Slashy-String" ohne 'Escape' println(dollar) // weitere Möglichkeit und Einfügen von '/' ``` ...bis hin zu komplexen mehrzeiligen Textblöcken Beispiel ``` def dreifach = ''' Ich bin ein String der über mehrere Zeilen geht/n''' def tripple = """ erste Zeile zweite Zeile dritte Zeile""" println(dreifach) //Ich bin //ein String der über //mehrere Zeilen geht println(tripple) //erste Zeile //zweite Zeile //dritte Zeile ``` ### Statische vs. dynamische Typisierung Java = statisch typisiert d.h. der Typ der Variablen wird zur Kompilierungszeit festgelegt und kann sich nicht ändern Beispiel ``` String s = "Hallo Welt"; System.out.println(s); // Hallo Welt s = 123; System.out.println(s); // -> Compiler-Fehler ``` Groovy = dynamisch typisiert d.h. der Typ der Variablen wird zur Laufzeit bestimmt. Daher ist es auch möglich einer Variablen die zuvor einen String-Wert hatte, einen Integer-Wert zuzuweisen Beispiel ``` def s = "Hallo Welt" println s.getClass() // -> class java.lang.String s = 123 println s.getClass() // -> class java.lang.Integer ``` ### GString Man kann jede Art von Ausdruck in String-Literale einfügen, ausser einfach (') und dreifach einfach angeführte Strings ('''). Dabei wird ein Platzhalter im String durch seinen tatsächlichen Wert ersetzt, wenn der String ausgewertet wird. Platzhalter werden durch `${ausdruck}` gekennzeichnet Beispiel ``` def person = [name: 'Thomas Smits', lehrt: 'PR3'] def hochschule = "Hochschule Mannheim" def ausdruck = "Hallo, mein Name ist ${person.name}. Ich unterrichte ${person.lehrt}. An der ${hochschule}." println(ausdruck) // -> Hallo, mein Name ist Thomas Smits. Ich unterrichte PR3. An der Hochschule Mannheim ``` Man nennt dies einen `GString` ### String Konkatenation Jeder String kann mit '+' konkateniert werden Beispiel ``` def eins = "Ein String" def zwei = ' wird konkateniert' println(eins + zwei) // -> Ein String wird konkateniert ``` ### String Index Man kann auf Zeichen eines Strings mit positiven und negativen Indizes zugreifen Zählungen beginnen bei null und negative Indizes beginnen den String am Ende Beispiel ``` def greeter = "Hallo Welt" println(greeter[1]) // -> 'a' println(greeter[-4]) // -> 'W' ```