Groovy 基础知识02

Groovy的函数参数

Groovy灵活的初始化与具名参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class HelloWorldGroovy {
def num, price, others

def access(num, price, others) {
println "access received :" + "num = " + num + "price = " + price + "others = " + others
}

public static void main(String[] args) {
// 标准的构造
def instance1 = new HelloWorldGroovy(num: 5, price: 12.0f, others: "A")
println "received :" + "num = " + instance1.num + " price = " + instance1.price + " others = " + instance1.others
// 使用方法赋值
instance1.access(x: 1, y: 2, z: 3, 5, 12.0f)
// 使用方法赋值
instance1.access(5, 12.0f, x: 1, y: 2, z: 3)
}
}

输出

1
2
3
received :num = 5 price = 12.0 others = A
access received :num = [x:1, y:2, z:3]price = 5others = 12.0
access received :num = [x:1, y:2, z:3]price = 5others = 12.0

Groovy默认实现了构造方法,我们可以灵活的直接使用具名参数来初始化实例;Groovy的函数传参也很有特点:如果传入的参数多于实际的形参,而且多出的实参是k-v键值对,那么groovy会假设第一个形参为Map,并将这些k-v键值对赋值给map,当然这个k-v映射的map位置也可以变换位置.

不过,虽然Groovy的入参方式很灵活,但是也对初学者带来一些疑惑,所以一般来讲我们还是使用具名的入参好一点,这样方便其他程序员阅读代码

可选形参

使用Groovy的时候,我们可以使用可选形参来指定默认值,这样就不必反复的传入重复的参数了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class HelloWorldGroovy {
// 我们定义可选的形参base,当我们给出默认的值,这个参数就是可选的,可以在不传参的情况下使用默认值
def log(x, base = 10) {
Math.log(x) / Math.log(base)
}

public static void main(String[] args) {
def h = new HelloWorldGroovy()
// 不指定base的值,直接使用默认参数
println(h.log(4))
// 也可使用自己传入的参数
println(h.log(4, 2))
}
}

多赋值

向方法一次传入多个参数,这在很多语言里面都很常见,例如Java的可变参数,但是如果我们需要在方法中返回多个结果呢?虽然不是很常见,但是很实用,python就支持,java不支持的情况下我们一般就用集合包装这些结果后再返回.不过Groovy可以实现类似python的多值返回

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class HelloWorldGroovy {
def spilitName(str) {
//直接返回多个值
str.split(" ")
}

static void main(String[] args) {
def h = new HelloWorldGroovy()
// 直接接受多个值
def (firstName, lastName) = h.spilitName("bill gates")
println "$firstName $lastName"
// 交换两个值
(firstName, lastName) = [lastName, firstName]
println "$firstName $lastName"
}
}

我们还可以使用这个特性来交换变量,不需要创建中间变量来保存被交换的值,只需将需交换的变量放在园括号内,置于赋值表达式左侧,同时将它们以相反的顺序放于右侧的方括号内

如果返回的多个值数量多余左侧的接受变量的数量,那么多出的返回值会被丢弃;反之,返回的多个值数量少于左侧的接受变量的数量,那么不足的接受变量会被赋值为null