1. 介绍
本篇内容, 介绍Groovy中的选择性和truth相关知识点。
2. 选择性-Optionality
主要介绍Groovy中的各种可选性的地方。所谓的可选性就是语法中可以省略的地方,也可以写上的地方。
可写可不写,都不影响整个语法的解析和含义。叫做语法的选择性。
2.1 可选的括号
如果至少有一个参数并且没有歧义,方法调用可以省略括号:
代码语言:javascript复制println 'Hello World'
def maximum = Math.max 5, 10
上面是省略了括号的,我们如果添加上括号的写法为:
代码语言:javascript复制println('Hello World')
println(Math.max(5, 10))
在这种不会产生歧义的地方,我们可以省略括号。
PS:实际工作中,建议大家尽量添加括号,因为可以规范语法。避免误解。
2.2 可选的分号
在Groovy中,如果行仅包含一条语句,则可以省略行末尾的分号;
。
例如:
代码语言:javascript复制assert true;
可以省略为:
代码语言:javascript复制assert true
Ps: 关于Groovy中的分号,现在约定成俗的写法就是不给代码中添加分号,统一都不进行添加了。
但是如果一行中有多段代码。还是需要添加上分号的。如果是一行代码就可以省略掉分号了。
代码语言:javascript复制boolean a = true; assert a
2.3 可选的 return 关键字
在Groovy中,返回在方法或闭包体中计算的最后一个表达式。这意味着return
关键字是可选的。
带return关键字的写法为:
代码语言:javascript复制int add(int a, int b) {
return a b
}
println add(1, 2) //输出:3
我们知道,最后一句代码是方法的返回值。可以省略掉return:
代码语言:javascript复制int add(int a, int b) {
a b
}
println add(1, 2) //输出:3
两者是等效的。
2.4 可选的 public 关键字
默认情况下,Groovy类和方法是公共的。因此,该类的public 关键字可以省略:
代码语言:javascript复制public class Server {
public String toString() { "a server" }
}
可以省略为:
代码语言:javascript复制class Server {
String toString() { "a server" }
}
但是一点也不影响该类的在其他地方的使用。
3. 表达式的真假-Truth
主要介绍Groovy中的一些比较值的true的返回情况。
Groovy通过应用下面给出的规则来决定表达式是真还是假。
3.1 Boolean 表达式
如果对应的布尔值为True,则为True。
代码语言:javascript复制println true //输出: true
println !false //输出: true
3.2 集合和数组Arrays
非空集合和数组为true。反之为false。
代码语言:javascript复制assert [1, 2, 3] //输出: true
println ![] //输出 true;
3.3 匹配器
如果匹配器至少有一个匹配项,则为True。
代码语言:javascript复制assert ('a' =~ /a/)
assert !('a' =~ /b/)
常见的就是正则表达式的匹配逻辑了。
3.4 迭代器和枚举
具有其他元素的迭代器和枚举被强制为true。
代码语言:javascript复制assert [0].iterator()
assert ![].iterator()
Vector v = [0] as Vector
Enumeration enumeration = v.elements()
assert enumeration
enumeration.nextElement()
assert !enumeration
3.5 Maps对象
非空映射的计算结果为true。
代码语言:javascript复制assert ['one' : 1]
println ![:] //输出 true
3.6 Strings对象
非空字符串、GStrings和CharSequences被强制为true。
代码语言:javascript复制assert 'a'
assert !''
def nonEmpty = 'a'
assert "$nonEmpty"
def empty = ''
assert !"$empty"
3.7 数值类型
非零数字为true。
代码语言:javascript复制assert 1
assert 3.5
assert !0
3.8 对象引用
非空对象引用被强制为true。
代码语言:javascript复制assert new Object()
assert !null
3.9 使用asBoolean()自定义true
为了自定义groovy是将对象求值为true还是false,需要自定义实现asBoolean()
方法:
class Color {
String name
boolean asBoolean(){
name == 'green' ? true : false
}
}
Groovy将调用此方法将对象强制为布尔值,例如:
代码语言:javascript复制assert new Color(name: 'green')
assert !new Color(name: 'red')
4. 小结
本篇内容介绍了一些Groovy中的可选性内容,告诉我们在代码中哪些地方是可以省略不用写的。
同时也告诉了各种数据对象在进行boolean判断时,什么情况下为true,什么情况下为false。
这个判断在实际工作使用中还是很有意义的。也将会大量的使用。这个是一个需要了解弄明白的知识点。
以上内容也可以通过Groovy的官方文档:Groovy Language Documentation (groovy-lang.org) 了解和学习。
下篇,继续介绍语法相关的知识 Typing。如果觉得介绍的内容还可以,希望能给我点个赞鼓励一下。谢谢。