Tempo de leitura: menos de 1 minuto
Uma das coisa que mais gosto no Groovy, é que ele pode decidir se uma variável é verdadeira ou falsa, independente dela ser instância booleana. Este recurso é chamado de Groovy Truth, para isso existe algumas regrinhas que o Groovy usa para decisão.
Usualmente, cada tipo de variável tem sua regra, vejamos a baixo cada uma delas.
Expressão Booleana
Numa expressão booleana, o Groovy retornará true quando seu valor for true, nada diferente do que já conhecemos.
[code language=”groovy”]
assert true //true é true…
assert !false //…false é false, simples assim.
[/code]
Coleções, Arrays e Mapas
Uma coleção ou array não vazio é considerado true.
[code language=”groovy”]
//coleções e arrays
assert [1, 2, 3]
assert ![]
//mapas
assert [‘one’ : 1]
assert ![:]
[/code]
Iterators e Enumerations
Iterators e Enumerations serão considerados true enquanto ainda existir item nos mesmos.
[code language=”groovy”]
//iterator
assert [0].iterator()
assert ![].iterator()
//enumeration
Vector v = [0] as Vector
Enumeration enumeration = v.elements()
assert enumeration
enumeration.nextElement()
assert !enumeration
[/code]
Matchers
Quando uma ou mais informação “casarem” com o padrão, o Matcher será true, se nada “casar”, será false.
[code language=”groovy”]
assert (‘a’ =~ /a/)
assert !(‘a’ =~ /b/)
[/code]
Strings
String, GString e CharSequences são considerados true, quando são diferente de vazio ou branco.
[code language=”groovy”]
assert ‘a’
assert !”
def nonEmpty = ‘a’
assert "$nonEmpty"
def empty = ”
assert !"$empty"
[/code]
Numbers (Integer, Long, …)
Qualquer instancia numérica é considerada true quando seu valor for diferente de 0 (zero).
[code language=”groovy”]
assert 1
assert 3.5
assert -1
assert !0
[/code]
Referencia de qualquer objeto
Objetos diferentes de nulo são considerados true, essa regra vale para qualquer objeto.
[code language=”groovy”]
assert new Object()
assert ‘String’
assert "GString${1}"
assert !null
Integer i = null
assert !i
[/code]
Customização da regra
O Groovy possibilita a customização da regra, para isso basta no meu objeto sobrescrever o método asBoolean(). Veja um exemplo:
[code language=”groovy”]
class Cor {
String nome
/**
* quando a cor for verde, retornará true, se não false.
**/
boolean asBoolean(){
nome == ‘verde’ ? true : false
}
}
assert new Cor(name: ‘verde’)
assert !new Cor(name: ‘vermelho’)
[/code]