3.6 KiB
Groovy-Truth
Groovy entscheidet nach folgenden Regeln, ob ein Ausdruck true oder false ist:
Boolean
True wenn entsprechender boolean Wert true ist
assert true
assert !false
Collections und Arrays
Non-Empty Collections und arrays sind true
assert [1,2,3]
assert ![]
Matchers
True wenn mind. ein "match"
assert = 'a' =~ /a/
assert = !('a' =~ /b/)
Iterators und Enumerations
Iteratoren und Enumerationen mit weiteren Elementen sind true
assert [0].iterator()
assert ![].iterator()
Vector v = [0] as Vector
Enumeration enumeration = v.elements()
assert enumeration
enumeration.nextElement()
assert !enumeration
Maps
Non-Empty Maps sind true
assert ['one' : 1]
assert ![:]
Strings
Non-Empty Strings, GStrings, CharSequences sind true
assert 'a'
assert !''
def nonEmpty = a
assert "$nonEmpty"
def empty = ''
assert !"$empty"
Numbers
Non-zero Nummern sind true
assert 1
assert 3.5
``assert !0
Object References
Non-null Objekt-Referenzen sind true
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
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.
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:
if(string!=null && string.length()>0){
result = 'Found'
} else {
result = 'Not Found'
}
Kann man:
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:
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 leer ist.
def result = ausdruck1 ?: ausdruck2
- ausdruck1: Dies ist der Ausdruck der ausgewertet wird, wenn dieser einen "truthy" Wert hat.
- ausdruck2: Dies ist der Asudruck, wenn ausdruck1 "null" oder "falsly" ist
If-Else Bedingungen
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
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" 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 matcht, wenn der Call auf dem Clojure ein Return basierend auf Groovy-Truth zurück gibt
Groovy unterstützt auch folgende Schreibweise:
def partner = switch(person){
case 'Romeo' -> 'Juliet'
case 'Adam' -> 'Eve'
case 'Eins' -> 'Zwei'
}