groovy-lecture/skript/schleifen.md

87 lines
2.2 KiB
Markdown

# Schleifen
## While-Schleife
Syntax Kopfgesteuerte `while-Schleife`
```Groovy
def y = 0
while (y < 5){
print(y + " ") // Ausgabe: 1 2 3 4
y++
}
```
## for-Schleife
Syntax der `for-Schleife` wie in Java
```Groovy
for (int i = 0; i < 5; i++){
print(i + " ") // Ausgabe: 1 2 3 4
}
```
## times()-Schleife:
In Groovy besitzen Zahlen die Methode `n.times()`. Sie bekommt ein Closure als Parameter und führt die übergebene Methode **n-mal** aus. Man kann den Variablen innerhalb der Closure Namen geben, kann es jedoch auch sein lassen. Gibt man den Variablen keinen Namen, wird der Name *it* benutzt.
````Groovy
5.times {def e -> print e + " "} // Ausgabe: 0 1 2 3 4
5.times {println it + " "} // Ausgabe: 0 1 2 3 4
````
## each()-Schleife:
Man kann über Elemente von Collections iterieren, indem man die collection `.each()` Methode benutzt. Sie bekommt ein Closure als Parameter und wendet den Ausdruck auf alle Elemente der Liste an.
````Groovy
def map = [name: "Thomas", nachname: "Smits"]
map.each {key, value -> println "$key: $value"} // Ausgabe: name: Thomas nachname: Smits
````
## for-in Schleife
```Groovy
for (variable in iterable) {body}
```
Die `for-in Schleife` folgt dieser einfachen Struktur. Sie durchläuft das Objekt `iterable`. Häufig verwendete Iterables sind Ranges, Collections, Maps, Arrays, Iterators und Enumerationen. Jedes Objekt kann ein Groovy ein Iterable sein. Klammern um den Body sind optinal, wenn er nur aus einer Anweisung besteht.
Im Folgenden Beispiele für Iterationen:
### Über Ranges:
```Groovy
for (i in 0..5){
print(i + " ") // Ausgabe: 1 2 3 4 5
}
for (i in 'a'..<'d'){
print(i + " ") // Ausgabe: letzter Buchstabe exklusiv
}
```
### Über eine Liste:
```Groovy
def list = [1, 2, 3, 4, 5]
for (element in list){
print element + " " // Ausgabe: 1 2 3 4 5
}
```
### über eine Array:
```Groovy
def arr = ['a', 'b', 'c']
for (ch in arr){
print (ch + " ") // Ausgabe: a b c
}
```
### Über eine Map:
```Groovy
def map = [name: "Alice", age: 18]
for (entry in map){
print(${entry.key}: ${entry.value}) // Ausgabe: name: Alice age: 18
}
```
### Über eine Zeichenfolge:
```Groovy
def text = "Groovy"
for (ch in text){
print(ch + " ") // Ausgabe: G r o o v y
}
```