groovy-lecture/Datentypen.md

150 lines
3.8 KiB
Markdown
Raw Normal View History

2024-05-25 16:48:10 +02:00
# 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
```
2024-05-26 10:15:51 +02:00
Es entählt noch die eingebauten Datentypen `BigInteger` & `BigDecimal`
2024-05-25 16:48:10 +02:00
sie müssen nicht zusätzlich importiert werden - zählen aber zu den koplexen Datentypen
Beispiel
```
2024-05-26 10:16:24 +02:00
• 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
2024-05-25 16:48:10 +02:00
```
2024-05-26 10:18:01 +02:00
Wenn man das Schlüsselwort `def` verwendet, muss der Variablentyp
2024-05-25 16:48:10 +02:00
nicht angegeben werden. Das Programm erkennt autom. welchen Datentyp
2024-05-26 10:18:01 +02:00
die Variable haben soll.
2024-05-25 16:48:10 +02:00
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
```
2024-05-26 10:15:51 +02:00
# Komplexe Datentypen
2024-05-25 16:48:10 +02:00
2024-05-26 10:15:51 +02:00
### Strings
2024-05-25 16:48:10 +02:00
Man kann einen String auf verschiedene Arten definieren.
Sie reichen von einfachen einzeiligen Strings ...
2024-05-26 10:15:51 +02:00
2024-05-25 16:48:10 +02:00
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
2024-05-26 10:15:51 +02:00
2024-05-25 16:48:10 +02:00
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
2024-05-26 10:15:51 +02:00
2024-05-25 16:48:10 +02:00
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
2024-05-26 10:15:51 +02:00
2024-05-25 16:48:10 +02:00
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
2024-05-26 10:15:51 +02:00
2024-05-25 16:48:10 +02:00
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
2024-05-26 10:15:51 +02:00
2024-05-25 16:48:10 +02:00
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
2024-05-26 10:15:51 +02:00
2024-05-25 16:48:10 +02:00
Beispiel
```
def greeter = "Hallo Welt"
println(greeter[1]) // -> 'a'
println(greeter[-4]) // -> 'W'
```