192 lines
3.7 KiB
Markdown
192 lines
3.7 KiB
Markdown
|
## Groovy-Truth
|
||
|
Groovy entscheidet nach folgenden Regeln, ob ein Ausdruck true oder false ist:
|
||
|
|
||
|
##### Boolean
|
||
|
True wenn entsprechender boolean Wert true ist
|
||
|
``` Groovy
|
||
|
assert true
|
||
|
assert !false
|
||
|
```
|
||
|
|
||
|
##### Collections und Arrays
|
||
|
Non-Empty Collections und arrays sind true
|
||
|
``` Groovy
|
||
|
assert [1,2,3]
|
||
|
assert ![]
|
||
|
```
|
||
|
|
||
|
##### Matchers
|
||
|
True wenn mind. ein "match"
|
||
|
``` Groovy
|
||
|
assert 'a' =~ /a/
|
||
|
assert !('a' =~ /b/)
|
||
|
```
|
||
|
|
||
|
##### Iterators und Enumerations
|
||
|
Iteratoren und Enumerationen mit weiteren Elementen sind true
|
||
|
```Groovy
|
||
|
assert [0].iterator()
|
||
|
assert ![].iterator.hasNext()
|
||
|
Vector v = [0] as Vector
|
||
|
Enumeration enumeration = v.elements()
|
||
|
assert Enumeration
|
||
|
enumeration.nextElement()
|
||
|
assert !enumeration.hasMoreElements()
|
||
|
```
|
||
|
|
||
|
##### Maps
|
||
|
Non-Empty Maps sind true
|
||
|
``` Groovy
|
||
|
assert ['one' : 1]
|
||
|
assert ![:]
|
||
|
```
|
||
|
|
||
|
##### Strings
|
||
|
Non-Empty Strings, GStrings, CharSequences sind true
|
||
|
``` Groovy
|
||
|
assert 'a'
|
||
|
assert !''
|
||
|
def nonEmpty = a
|
||
|
assert "$nonEmpty"
|
||
|
def empty = ''
|
||
|
assert !"$empty"
|
||
|
```
|
||
|
|
||
|
##### Numbers
|
||
|
Non-zero Nummern sind true
|
||
|
``` Groovy
|
||
|
assert 1
|
||
|
assert 3.5
|
||
|
assert !0
|
||
|
```
|
||
|
|
||
|
##### Object References
|
||
|
Non-null Objekt-Referenzen sind true
|
||
|
``` Groovy
|
||
|
assert new Object()
|
||
|
assert !null
|
||
|
```
|
||
|
|
||
|
##### Truth verändern mit asBoolean()-Methode
|
||
|
Man kann das Verhalten von Groovy auf boolean verändern, indem man eine asBoolean()-Methode implementiert
|
||
|
|
||
|
```Groovy
|
||
|
class Color{
|
||
|
|
||
|
String name
|
||
|
|
||
|
boolean asBoolean(){
|
||
|
name == 'green' ? true : false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ...
|
||
|
|
||
|
assert new Color(name: 'green')
|
||
|
assert !new Color(name: 'red')
|
||
|
```
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
## Bedingte Operatoren
|
||
|
### Not Operator
|
||
|
Der "Nicht"-Operator wird mit einem "!" dargestellt.
|
||
|
```Groovy
|
||
|
def wasbinIch = true
|
||
|
println !wasBinIch // Ausgabe "false"
|
||
|
```
|
||
|
|
||
|
### Ternärer Operator
|
||
|
Der ternäre Operator ist ein Shortcut, der einem if/else Bedingung entspricht und einer Variablen einen Wert zuweist.
|
||
|
|
||
|
Statt:
|
||
|
|
||
|
```Groovy
|
||
|
if(string!=null && string.length()>0){
|
||
|
result = 'Found'
|
||
|
} else {
|
||
|
result = 'Not Found'
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Kann man:
|
||
|
|
||
|
```Groovy
|
||
|
|
||
|
result = (string!=null && string.length()>0) ? 'Found' : 'Not Found'
|
||
|
```
|
||
|
|
||
|
schreiben.
|
||
|
|
||
|
Auch ist der ternäre Operator kompatibel mit dem "Groovy Truth", sodass man den Ausdruck noch kürzer Verfassen kann:
|
||
|
```Groovy
|
||
|
|
||
|
result = string ? 'Found' : 'Not Found'
|
||
|
```
|
||
|
|
||
|
### Elvis-Operator
|
||
|
Der "Elvis-Operator" ist eine Kurzform des ternären Operators. Dieser wird verwendet, um einen Standardwert anzugeben, wenn eine Variable "null" oder falsly ist.
|
||
|
|
||
|
```Groovy
|
||
|
def result = ausdruck1 ?: ausdruck2
|
||
|
```
|
||
|
- ausdruck1: Dies ist der Ausdruck der ausgewertet wird, wenn dieser einen "truthy" Wert hat.
|
||
|
- ausdruck2: Dies ist der Ausdruck, wenn ausdruck1 "null" oder "falsly" ist
|
||
|
|
||
|
|
||
|
### If-Else Bedingungen
|
||
|
```Groovy
|
||
|
def zahl = 8
|
||
|
|
||
|
if(zahl > 10){
|
||
|
println "Zahl größer 10"
|
||
|
}else if(zahl < 10){
|
||
|
println "Zahl ist kleiner 10"
|
||
|
}else{
|
||
|
println "Zahl ist gleich 10"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Switch Case
|
||
|
```Groovy
|
||
|
def x = 3
|
||
|
switch (x) {
|
||
|
case 1:
|
||
|
println "x is one"
|
||
|
break
|
||
|
case 2:
|
||
|
println "x is two"
|
||
|
break
|
||
|
case 3..5: // Bereich
|
||
|
println "x is between 3 and 5"
|
||
|
break
|
||
|
case Integer:
|
||
|
println "x is an integer"
|
||
|
break
|
||
|
case ~/^\\d+$/: // Regex als Case erlaubt
|
||
|
println "x is a number"
|
||
|
break
|
||
|
default:
|
||
|
println "x is something else"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
|
||
|
Switch Unterstützt folgende Arten des Vergleichs:
|
||
|
- Case-Values stimmen überein, wenn Switch-Value ein Instanz der selben Klasse ist
|
||
|
- "Regulärer Ausdruck Case"-Value stimmt überein, wenn `toString()` Repräsentation vom Switch-Value dem Regex gleicht
|
||
|
- "Collection Case"-Values matchen mit dem Switch-Value, wenn Switch-Value in der Collection vorkommt
|
||
|
- Closure Case-Values match, wenn der Call auf dem Clojure ein Return basierend auf Groovy-Truth zurück gibt
|
||
|
|
||
|
Groovy unterstützt auch folgende Schreibweise:
|
||
|
```Groovy
|
||
|
def partner = switch(person){
|
||
|
case 'Romeo' -> 'Juliet'
|
||
|
case 'Adam' -> 'Eve'
|
||
|
case 'Eins' -> 'Zwei'
|
||
|
}
|
||
|
```
|
||
|
|
||
|
|