groovy-lecture/Datentypen.md

150 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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'
```