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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

注释:

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

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

方法调用

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

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

可选的括号

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

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

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

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

命名参数传递

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

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

给方法传递闭包

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

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

上面的代码等价于:

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

属性

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

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

安全导航

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

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

groovy-语句的更多相关文章

  1. Groovy与Gradle在Android中的应用

    大家都知道, Android Studio 的编译构建,是基于Gradle的, 而Gradle又是基于Groovy, Groovy又是基于Java的 Android Studio 的gradle 本身 ...

  2. ElasticSearch 论坛搜索查询语句

    概述 研究论坛搜索如何综合时间和TF/IDF权重. 自定义权重计算的效率问题 数据结构 假设有一个论坛的搜索 字段包括: subject:标题 message:内容 dateline:发布时间 tag ...

  3. Groovy 配置环境变量

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70313790 本文出自[赵彦军的博客] 概念 Groovy 配置环境变量 开发工具 ...

  4. 教妹学 Java:动态伴侣 Groovy

    ​ 00.故事的起源 “二哥,听说上一篇<多线程>被 CSDN 创始人蒋涛点赞了?”三妹对她提议的<教妹学 Java>专栏一直很关心. “嗯,有点激动.刚开始还以为是个马甲,没 ...

  5. groovy常用语法及实战

    groovy语言简介 一种基于JVM的敏捷开发语言,作为编程语言可编译成java字节码,也可以作为脚本语言解释执行. 结合了Python.Ruby和Smalltalk的许多强大的特性 支持面向对象编程 ...

  6. gradle学习笔记(1)

    1. 安装     (1) 下载最新gradle压缩包,解压到某处.地址是:Gradle web site:     (2) 添加环境变量:             1) 变量名:GRADLE_HOM ...

  7. Gradle使用小结

    Gradle是CI过程工具,而不是系统.持续集成过程中的构建.自动化测试.打包.发布都可以使用Gradle来完成.而持续进程过程为我们降低各方面成本,提高产品信心,提高产品质量有着非常重要的作用(不要 ...

  8. 深入理解Android之Gradle

    深入理解Android之Gradle 格式更加精美的PDF版请到:http://vdisk.weibo.com/s/z68f8l0xTYrZt 下载 Gradle是当前非常"劲爆" ...

  9. Android项目中如何用好构建神器Gradle?(转)

    最近在忙团队并行开发的事情,主要是将各个团队的代码分库,一方面可以降低耦合,为后面模块插件化做铺垫,另一方面采用二进制编译,可以加快编译速度.分库遇到了一些问题,很多都要通过Gradle脚本解决,所以 ...

随机推荐

  1. NSDictionary(key与value)

    1.key与value关系,用一个key的值控制整个模型 NSDictionary *dic = @{@"channelKey":channelModel,@"chann ...

  2. 记录linux系统下所有用户的操作信息

    在日常运维中,我们需要清楚服务器上每个用户登录后都做了哪些操作,我们需要记录下每个用户的操作命令.下面的内容设置可以实现在Linux下所有用户,不管是远程还是本地登陆,在本机的所有操作都会记录下来,并 ...

  3. POJ 1125 Stockbroker Grapevine

    Stockbroker Grapevine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33141   Accepted: ...

  4. 浏览器默认样式(User Agent Stylesheet)

    原文:http://www.zjgsq.com/898.html 不同浏览器对于相同元素的默认样式并不一致,这也是为什么我们在CSS的最开始要写 * {padding:0;marging:0}: 不过 ...

  5. Open Sans字体兼容问题解决办法[font-face]

    参考:http://www.tantengvip.com/2014/11/open-sans/ 1.font-face使用方法 font-face是CSS3中的一个模块,主要是把自定义的Web字体嵌入 ...

  6. [Android学习笔记]理解焦点处理原理的相关记录

    焦点处理相关记录 以下所涉及的焦点部分,只是按键移动部分,不明确包含Touch Focus部分 需解决问题 控件的下一个焦点是哪? 分析思路 当用户通过按键(遥控器等)触发焦点切换时,事件指令会通过底 ...

  7. 深入分析 Javascript 单线程

    面试的时候发现99%的童鞋不理解为什么JavaScript是单线程的却能让AJAX异步发送和回调请求,还有setTimeout也看起来像是多线程的?还有non-blocking IO, event l ...

  8. 基于Flot可放缩的折线图

    Flot初步 Flot是一个免费开源的图标插件,可以用它开发出功能强大的图表系统.下面着重讲解在Asp.net中如何使用这个插件做出功能强大的图表应用. 关于Flot,可以在这里查看现有的例子(或者是 ...

  9. 最短路径算法之Dijkstra算法(java实现)

    前言 Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知 ...

  10. JAVA中获取当前系统时间

    一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; public class NowStrin ...