Groovy : What is Groovy Truth and define Custom Groovy Truth
What is Groovy Truth
Groovy has its own way of defining what is true and what is false, this is called theGroovy Truth
. In Java, we have to write statements like if(obj ==null)
, in groovy you can simply write if(obj)
and you can define in what conditions this object will evaluate to true and when it will evaluate to false. Info
To define your custom logic for groovy Truth you need to define method
boolean asBoolean(){
// your logic here
}
What is True in Groovy
Following evaluated to true in groovy- boolean true
- Not null objects
- Non 0 numbers
- Not null and not empty Strings
- Not null and not empty lists, maps, collections
What is False in Groovy
Following things evaluates to false in groovy- boolean false
- Numeric 0 number
- Null objects
- Null Strings
- Null or empty lists, maps, collections
def groovyTruth = {val->
if(val)
println "$val is true"
else
println "$val is false"
}
boolean b1 = true
boolean b2 = false
groovyTruth(b1) // true
groovyTruth(b2) // false
int n1 = 0
int n2 = 12
int n3 = -321
groovyTruth(n1) // false
groovyTruth(n2) // true
groovyTruth(n3) // true
String s1 = null
String s2 = ""
String s3 = "some string"
groovyTruth(s1) // false
groovyTruth(s2) // false
groovyTruth(s3) // true
Object o1 = null
Object o2 = new Object()
groovyTruth(o1) // false
groovyTruth(o2) // true
List l1 = null
List l2 = []
List l3 = [1,2,3]
groovyTruth(l1) // false
groovyTruth(l2) // false
groovyTruth(l3) // true
Map m1 = null
Map m2 = [:]
Map m3 = ['key': 'val']
groovyTruth(m1) // false
groovyTruth(m2) // false
groovyTruth(m3) // true
When we run this code, it will give the following output
Output
true is true
false is false
0 is false
12 is true
-321 is true
null is false
is false
some string is true
null is false
java.lang.Object@37074b2c is true
null is false
[] is false
[1, 2, 3] is true
null is false
[:] is false
[key:val] is true
true is true
false is false
0 is false
12 is true
-321 is true
null is false
is false
some string is true
null is false
java.lang.Object@37074b2c is true
null is false
[] is false
[1, 2, 3] is true
null is false
[:] is false
[key:val] is true
Custom Groovy Truth
You can also define your custom Groovy Truth, that is how object will evaluate to true and false . For this you need to override the methodBoolean asBoolean()
to return a boolean value which will be used to evaluate truth of the object.Let's take a class Student and it should give true if the status of student is enrolled
class Student{
String name
String status
boolean asBoolean(){
return status == 'enrolled'
}
String toString(){
return name
}
}
Student s1 = new Student(name : 's1', status: 'enrolled')
Student s2 = new Student(name : 's2', status: 'applied')
def groovyTruth = {val->
if(val)
println "$val is true"
else
println "$val is false"
}
groovyTruth(s1)
groovyTruth(s2)
So the above code will give the following output
Output
s1 is true
s2 is false
s1 is true
s2 is false
How to Customise groovy Truth for the existing Classes in Groovy
Let's say we want to make the string "null" to evaluate to false. Then we can override theasBoolean()
method of the String
class.So, the following will evaluate to false in this scenario.
- null - null object
- "" - blank string
- "null" - string will null as a string
String.metaClass.asBoolean = {
if(delegate == null || delegate == "" || delegate == "null")
return false
return true
}
String s1 = null
String s2 = ""
String s3 = "null"
String s4 = "some string"
def groovyTruth = {val->
if(val)
println "$val is true"
else
println "$val is false"
}
groovyTruth(s1)
groovyTruth(s2)
groovyTruth(s3)
groovyTruth(s4)
This will give the following output
Output
null is false
is false
null is false
some string is true
null is false
is false
null is false
some string is true
No comments: