Groovy 学习 (整理至精通Groovy)语法介绍

1.Groovy 是没有类型的Java,所以定义变量的时候可以不指定类型,Groovy 会根据对象的值来判断其类型.

def str = "Hello world"
println str.class


2.通过Groovy进行循环
在Groovy中,for循环变得更简洁,更易阅读。首先,范围的定义方式更加简洁:0..4表明包含整数0,1,2,3,4; 0..<4 表示0,1,2,3; a..e 表示 a,b,c,d,e

for(i in 1..5){
println i
}


Groovy也支持默认参数值

def repeat(val, repeat=5){
for(i in 0..<repeat){
println val
}
}

repeat("Hello world",2)
repeat("foo",4)


3. 操作集合
在Groovy中,我们可以用范围来定义集合或者数组。
如:

def range = 0..4
println range.class
def coll = ["Groovy","Java","Ruby"]
println coll.class


为某个集合添加元素时,我们可以使用以下几种方法

coll.add("Python")
coll << "Smalltalk"
coll[5] = "Perl"


检索方式也更加灵活


println coll[1]


Groovy还允许在集合中增加或去掉集合

def numbers = [1,2,3,4]
def numbers2 = numbers +5 //=[1,2,3,4,5]
println numbers2
def numbers3 = numbers - [2,3]//=[1,4]
println numbers3


一些特殊调用

def numbers = [1,2,3,4]
println numbers.join(";") //= 1;2;3;4 ,将集合的元素拼接成了字符串
println [1,2,3,4,3].count(3) //=2 统计元素出现的次数
["Java","Groovy"]*.toUpperCase() // 全部转换成大写

请注意 *. 标记。对于以上列表中的每个值,都会调用 toUpperCase(),生成的集合中每个 String 实例都是大写的.

4.映射
定义Map

def hash = [name:"Andy", "VPN-#":45]
println hash.getClass() //=java.util.LinkedHashMap

name 看起来像一个变量,但是在幕后,Groovy 会将它变成 String。
操作键值对

hash.put("id",23)
hash.get("name")
hash.dob = "01/29/76"
println hash["name"] //="Andy"


请注意,在使用 [] 语法从映射获取项时,必须将项作为 String 引用。

5.闭包

使用闭包对集合进行迭代


def acoll = ["Groovy", "Java", "Ruby"]

acoll.each{
println it
}


请注意,each 直接在 acoll 实例内调用,而 acoll 实例的类型是 ArrayList。在 each 调用之后,引入了一种新的语法 — {,然后是一些代码,然后是 }。由 {} 包围起来的代码块就是闭包。

闭包中的 it 变量是一个关键字,指向被调用的外部集合的每个值 — 它是默认值,可以用传递给闭包的参数覆盖它。下面的代码执行同样的操作,但使用自己的项变量:

def acoll = ["Groovy", "Java", "Ruby"]

acoll.each{ value ->
println value
}



使用闭包迭代Map

def hash = [name:"Andy", "VPN-#":45]
hash.each{ key, value ->
println "${key} : ${value}"
}


闭包的其他用途:因为闭包是一个代码块,所以能够作为参数进行传递(Groovy 中的函数或方法不能这样做)。闭包在调用的时候才会执行这一事实(不是在定义的时候)使得它们在某些场合上特别有用。

def excite = { word ->
return "${word}!!"
}


可以通过两种方法调用闭包:直接调用或者通过 call() 方法调用

assert "Groovy!!" == excite("Groovy")
assert "Java!!" == excite.call("Java")


6.Groovy 中的类
Groovy类就是Java类,我们先定义一个bean.

class Song {
def name
def artist
def genre
static void main(args) {
def sng = new Song(name:"Le Freak",
artist:"Chic", genre:"Disco")
}
}

Groovy 自动提供一个构造函数,构造函数接受一个名称-值对的映射,这些名称-值对与类的属性相对应。这是 Groovy 的一项开箱即用的功能,除此之外,Groovy还生成了标准的 setter 和 getter 方法,所以可以像下面这样直接操纵类的属性,这些操作实际上都是通过setter,getter方法进行的,默认情况下,类的属性是私有的:

def sng3 = new Song()
sng3.name = "Funkytown"
sng3.artist = "Lipps Inc."
sng3.setGenre("Disco")

assert sng3.getArtist() == "Lipps Inc."


方法覆盖:

String toString(){
"${name}, ${artist}, ${genre}"
}


您可能已经想到:在 Groovy 中可以省略 return 语句。Groovy 默认返回方法的最后一行。所以在这个示例中,返回包含类属性的 String。

空指针安全性
Groovy 通过 ? 操作符提供了一个安全网 — 在方法调用前面添加一个 ? 就相当于在调用前面放了一个条件,可以防止在 null 对象上调用方法。

def d=null
println d?.toUpperCase()
d="Hello world"
println d?.toUpperCase()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值