groovy语句类似于java语句,但是在groovy中的分号”;”是可选的。比如:
3 |
def y = 5 ; def x = y + 7 |
而且对于一些方法参数等复杂的事情,我们可以横跨多行:
11 |
assert false: "should never happen ${x}" |
groovy支持一行给多个变量赋值:
这就使得我们的方法可以返回多个值了,比如返回经纬度的方法:
1 |
def geocode(String location) { |
2 |
// implementation returns [48.824068, 2.531733] for Paris, France |
6 |
def (_lat, _long) = geocode( "Paris, France" ) |
8 |
assert _lat == 48.824068 |
9 |
assert _long == 2.531733 |
当然我们也可以定义方法的参数类型:
1 |
def ( int i, String s) = [ 1 , 'Groovy' ] |
对于事先已经定义好的变量,我们在赋值的时候不需要def关键字:
1 |
def firstname, lastname |
3 |
(firstname, lastname) = "Guillaume Laforge" . tokenize () |
5 |
assert firstname == "Guillaume" |
6 |
assert lastname == "Laforge" |
当然,在赋值的时候可能会出现两侧的数量不一致的情况,比如当左侧数量多于右侧的时候,左侧多出来的为null:
2 |
def (a, b, c) = elements |
但是当右侧的多于左侧的时候,多出来的不赋值。
1 |
def elements = [ 1 , 2 , 3 , 4 ] |
2 |
def (a, b, c) = elements |
根据groovy的语法,我们可以在一行中swap两个变量:
1 |
// given those two variables |
4 |
// swap variables with a list |
注释:
1 |
print "hello" // This is a silly print statement |
3 |
/* This is a long comment |
4 |
about our favorite println */ |
我们可以发现#其实并不是注释字符。
方法调用
groovy中的方法调用类似于java,比如:
6 |
static void main(args) { |
8 |
def p = foo.calculatePrice() |
11 |
println "Found price: " + p |
可选的括号
在groovy中,Groovy中的方法调用可以省略括号,如果有至少一个参数,并且不存在任何含糊。比如:
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 |
给方法传递闭包
闭包也可以像其他对象一样传递给方法:
1 |
def closure = { param -> param + 1 } |
2 |
def answer = [ 1 , 2 ]. collect (closure) |
3 |
assert answer == [ 2 , 3 ] |
上面的代码等价于:
1 |
answer = [ 1 , 2 ]. collect { param -> param + 1 } |
2 |
assert answer == [ 2 , 3 ] |
属性
为了访问属性你可以使用属性名和.:
1 |
def bean = new Expando(name: "James" , location: "London" , id: 123 ) |
4 |
bean.location = "Vegas" |
5 |
println bean.name + " is now in " + bean.location |
6 |
assert bean.location == "Vegas" |
安全导航
如果你在访问属性的时候,避免出现空指针异常的话,那么安全导航操作符可能适合你:
2 |
def bar = foo?.something?.myMethod() |
- Groovy与Gradle在Android中的应用
大家都知道, Android Studio 的编译构建,是基于Gradle的, 而Gradle又是基于Groovy, Groovy又是基于Java的 Android Studio 的gradle 本身 ...
- ElasticSearch 论坛搜索查询语句
概述 研究论坛搜索如何综合时间和TF/IDF权重. 自定义权重计算的效率问题 数据结构 假设有一个论坛的搜索 字段包括: subject:标题 message:内容 dateline:发布时间 tag ...
- Groovy 配置环境变量
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70313790 本文出自[赵彦军的博客] 概念 Groovy 配置环境变量 开发工具 ...
- 教妹学 Java:动态伴侣 Groovy
00.故事的起源 “二哥,听说上一篇<多线程>被 CSDN 创始人蒋涛点赞了?”三妹对她提议的<教妹学 Java>专栏一直很关心. “嗯,有点激动.刚开始还以为是个马甲,没 ...
- groovy常用语法及实战
groovy语言简介 一种基于JVM的敏捷开发语言,作为编程语言可编译成java字节码,也可以作为脚本语言解释执行. 结合了Python.Ruby和Smalltalk的许多强大的特性 支持面向对象编程 ...
- gradle学习笔记(1)
1. 安装 (1) 下载最新gradle压缩包,解压到某处.地址是:Gradle web site: (2) 添加环境变量: 1) 变量名:GRADLE_HOM ...
- Gradle使用小结
Gradle是CI过程工具,而不是系统.持续集成过程中的构建.自动化测试.打包.发布都可以使用Gradle来完成.而持续进程过程为我们降低各方面成本,提高产品信心,提高产品质量有着非常重要的作用(不要 ...
- 深入理解Android之Gradle
深入理解Android之Gradle 格式更加精美的PDF版请到:http://vdisk.weibo.com/s/z68f8l0xTYrZt 下载 Gradle是当前非常"劲爆" ...
- Android项目中如何用好构建神器Gradle?(转)
最近在忙团队并行开发的事情,主要是将各个团队的代码分库,一方面可以降低耦合,为后面模块插件化做铺垫,另一方面采用二进制编译,可以加快编译速度.分库遇到了一些问题,很多都要通过Gradle脚本解决,所以 ...
随机推荐
- HTML5-WebSocket技术学习(1)
WebSocket是为解决客户端与服务端实时通信而产生的技术. 介绍它是什么的废话不多说了,直接说怎么用: 客户端: 1.创建一个 EventSource 对象 var es = new EventS ...
- poj 1458 Common Subsequence
Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 46387 Accepted: 19 ...
- 【转】【C#】C# 垃圾回收机制
摘要:今天我们漫谈C#中的垃圾回收机制,本文将从垃圾回收机制的原理讲起,希望对大家有所帮助. GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由 ...
- The Linux Storage Stack Diagram
相关文章: 如何提高Linux下块设备IO的整体性能?
- Caffe学习系列(16):caffemodel可视化
通过前面的学习,我们已经能够正常训练各种数据了.设置好solver.prototxt后,我们可以把训练好的模型保存起来,如lenet_iter_10000.caffemodel. 训练多少次就自动保存 ...
- [CareerCup] 4.7 Lowest Common Ancestor of a Binary Search Tree 二叉树的最小共同父节点
4.7 Design an algorithm and write code to find the first common ancestor of two nodes in a binary tr ...
- Linux基础与Linux下C语言编程基础
Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...
- 20135316王剑桥 linux第五周课实验笔记
4.1.1程序员的可见的状态 ———— Y86的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态.如图1所示. 1.程序寄存器(Program registers): %eax, %ec ...
- iOS开发系列--音频播放(音效和音乐)播放本地的
音频 在iOS中音频播放从形式上可以分为音效播放和音乐播放.前者主要指的是一些短音频播放,通常作为 点缀音频,对于这类音频不需要进行进度.循环等控制.后者指的是一些较长的音频,通常是主音频,对于这些音 ...
- 学习笔记——Maven实战(十)Maven 3,是时候升级了
去年10月份Apache Maven发布了3.0正式版,而在上个月的22号,Eclipse基金会宣布了Eclipse 3.7(Indigo)的发布,该版本Eclipse最大的新特性之一就是集成了Mav ...