groovy-语句

摘要:
groovy语句类似于java语句,但groovy中的分号“;”是可选的。1defelements=[1,2,3,4]2def=elements34asserta==15assertb==26assertc==3根据groovy的语法,我们可以在一行中交换两个变量:1/giventhosetwovariables2defa=1,B=234//swapvariablewithsistist5(a,B)=[B,a]67asserta==28assertb==1注意:1打印“hello”//Thissasilyprint语句23/*这是关于我们最喜欢的打印的评论4。*/5打印“hell”67//这不起作用:8#差评我们可以发现#实际上不是一个注释字符。方法调用在groovy中,方法调用类似于Java,例如:1classFoo{2defcalculatePrice(){31.234}56staticvoidmain{7defoo=newFoo()8defp=foo.ccalculateprice()9assertp>01011println“Foundprice:”+p12}13}可选括号在groovo中,groovy的方法调用可以省略括号。如果至少有一个参数,并且没有歧义。

groovy语句类似于java语句,但是在groovy中的分号”;”是可选的。比如:

1def x = [123]
2println x
3def y = 5def x = y + 7
4println x
5assert x == 12

而且对于一些方法参数等复杂的事情,我们可以横跨多行:

1def x = [123,
2 456]
3println(
4 x
5)
6if (x != null &&
7 x.size() > 5) {
8 println("Works!")
9}
10else {
11 assert false: "should never happen ${x}"
12}

groovy支持一行给多个变量赋值:

1def (a, b) = [12]
2 
3assert a == 1
4assert b == 2

这就使得我们的方法可以返回多个值了,比如返回经纬度的方法:

1def geocode(String location) {
2 // implementation returns [48.824068, 2.531733] for Paris, France
3 [48.8240682.531733]
4}
5 
6def (_lat, _long) = geocode("Paris, France")
7 
8assert _lat == 48.824068
9assert _long == 2.531733

当然我们也可以定义方法的参数类型:

1def (int i, String s) = [1'Groovy']
2 
3assert i == 1
4assert s == 'Groovy'

对于事先已经定义好的变量,我们在赋值的时候不需要def关键字:

1def firstname, lastname
2 
3(firstname, lastname) = "Guillaume Laforge".tokenize()
4 
5assert firstname == "Guillaume"
6assert lastname == "Laforge"

当然,在赋值的时候可能会出现两侧的数量不一致的情况,比如当左侧数量多于右侧的时候,左侧多出来的为null:

1def elements = [12]
2def (a, b, c) = elements
3 
4assert a == 1
5assert b == 2
6assert c == null

但是当右侧的多于左侧的时候,多出来的不赋值。

1def elements = [1234]
2def (a, b, c) = elements
3 
4assert a == 1
5assert b == 2
6assert c == 3

根据groovy的语法,我们可以在一行中swap两个变量:

1// given those two variables
2def a = 1, b = 2
3 
4// swap variables with a list
5(a, b) = [b, a]
6 
7assert a == 2
8assert b == 1

注释:

1print "hello" // This is a silly print statement
2 
3/* This is a long comment
4 about our favorite println */
5println "hello"
6 
7// This doesn't work:
8# Bad comment

我们可以发现#其实并不是注释字符。

方法调用

groovy中的方法调用类似于java,比如:

1class Foo {
2 def calculatePrice() {
3 1.23
4 }
5 
6static void main(args) {
7 def foo = new Foo()
8 def p = foo.calculatePrice()
9 assert p > 0
10 
11println "Found price: " + p
12 }
13}

可选的括号

在groovy中,Groovy中的方法调用可以省略括号,如果有至少一个参数,并且不存在任何含糊。比如:

1println "Hello world"
2System.out.println "Nice cheese Gromit!"

在命名参数的时候,也是可以省略的:

1compare fund: "SuperInvestment", withBench: "NIKEI"
2monster.move from: [3,4], to: [4,5]

命名参数传递

当调用一个方法时,你可以通过在命名参数。参数名称和值之间由一个冒号,比如:

1def bean = new Expando(name:"James", location:"London", id:123)
2println "Hey " + bean.name
3assert bean.id == 123

给方法传递闭包

闭包也可以像其他对象一样传递给方法:

1def closure = { param -> param + 1 }
2def answer = [12].collect(closure)
3assert answer == [23]

上面的代码等价于:

1answer = [12].collect { param -> param + 1 }
2assert answer == [23]

属性

为了访问属性你可以使用属性名和.:

1def bean = new Expando(name:"James", location:"London", id:123)
2def name = bean.name
3println("Hey ${name}")
4bean.location = "Vegas"
5println bean.name + " is now in " + bean.location
6assert bean.location == "Vegas"

安全导航

如果你在访问属性的时候,避免出现空指针异常的话,那么安全导航操作符可能适合你:

1def foo = null
2def bar = foo?.something?.myMethod()
3assert bar == null

免责声明:文章转载自《groovy-语句》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇微服务一键启动脚本shell带有环境变量的Kotlin入门(14)继承的那些事儿下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

groovy初体验:groovy在java中的应用

第一次接触groovy,主要是在java中嵌入groovy脚本,因为groovy和java的融合度非常好。 先放上来第一次写的一段groovy: 其实它完成的就是一句java的system.out操作,主要为了理解binding在groovy中的应用 说一下背景,这里的功能是为了打印日志,本来用的是system.out,结果师父为了让我接触一下groov...

Groovy操作符

Groovy操作符 这一篇简单介绍一下Groovy中的操作符。 算数操作符 groovy支持java中的所有操作符,下面只列举一些groovy特有的: ** power运算符,也叫次方。 assert 2 ** 3 == 8 **= power的一元运算 def f = 3 f **= 2 assert f == 9 类操作符 Safe naviga...

Groovy脚本-通用SQL开关

备注:使用Groovy语言进行编写,看不懂的同学请先了解Groovy脚本。 Groovy学习地址:https://www.cnblogs.com/tiechui2015/p/10828457.html。 本段程序实现的功能如下: 一、开关的维度是商户、机构、配置代码维度。设置有效标识控制是否生效。 二、采用All代表全商户特殊值,在商户号中配置All则表示...

Beanshell vs JSR223 vs Java JMeter脚本:性能关闭你一直在等待!

有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能。查看最流行的扩展机制,比较性能并分析哪一个是最好的。 这是乐队之战,JMeter风格。 Beanshell V. JSR223 V. Java Request Sampler 在我们之前的帖子中, JMeter Performance和Tuning Tips(由fantastik Phi...

Gradle入门到实战(一) — 全面了解Gradle

声明:本文来自汪磊的博客,转载请注明出处 可关注个人公众号,那里更新更及时,阅读体验更好:  友情提示由于文章是从个人公众号拷贝过来整理的,发现图片没有正常显示,没关注公众号的同学可通过如下链接查看:https://mp.weixin.qq.com/s?__biz=Mzg2NzAwMjY4MQ==&mid=2247483789&idx=1...

groovy-输入输出

Groovy为I/O提供了一系列的helper methods ,所有的这些方法都适用于标准的 Java Reader/Writer ,InputStream/OutputStream 和File 以及URL classes. 闭包的使用可以确保资源被正确的关闭,比如遍历文件的每一行可以使用下面的代码: 1 new File("foo.txt").ea...