danferj 发表于 2013-2-7 16:05:01

groovy学习笔记

groovy出了挺长时间了,但是一直采取观望态度,看到今年发展很迅速,决定学习一下,上午看了一篇文章,文章地址:
https://www6.software.ibm.com/developerworks/cn/education/java/j-groovy/index.html

做一点笔记,记录几个关键的特性

1.方法默认都是public,属性默认都是private,默认给所有属性加了getter和setter方法。可以省略方法的括号,可以直接点出属性来赋值(groovy自动调用get和set方法),可以省略return ,即执行到的最后一行代码就是返回值

2.可以用def定义无变量,groovy自动判断类型
def value = "Hello World"


3.各种for写法
for(i = 0; i < 5; i++)// 省略i的类型声明的for循环
for(i in 1..5)// i在1 到 5的取值范围内循环,相当于i<=5
for(i in 0..<5) // i在0到4的取值范围循环,相当于i<5

4. 方法中,设置参数的默认值,有默认值的话可以省略传值
def repeat(val, repeat=5){

5. 数组List
def coll = ["Groovy", "Java", "Ruby"] // 生成的是ArrayList实例

// 下面是给List添加项目的几个方法
coll.add("Python")
coll << "Smalltalk"
coll = "Perl"

// 可以对List进行 +和-的操作
def numbers =
numbers + 5 // 数组最后,添加一个5,成为
numbers - // 从数组中减去2个项目2,3,成为

// List的几个方便的方法
def numbers =
assert numbers.join(",") == "1,2,3,4" // 生成String,用,号分隔各项
assert .count(3) == 2 //计数“3”的数量

6. Map
def hash = // 生成的是LinkedHashMap的实例,例子中的name会自动认为是String的key

// 添加Map中映射的方式
hash.put("id", 23)// java风格
hash.id=23 // groovy风格
hash["id"] == 23 // 另一种经常见到的风格

7.闭包
// 遍历List:
def acoll = ["Groovy", "Java", "Ruby"]
acoll.each{
println it // it是代表当前项的关键字
}

// 传参,以改变it关键字
def acoll = ["Groovy", "Java", "Ruby"]
acoll.each{ value ->   // 这种传参的方式,和java语法有较大不同,还不太适应..
println value
}

// 遍历Map
def hash =
hash.each{ key, value ->
println "${key} : ${value}"
}

// 闭包的更多使用方式:
// 声明一个闭包:
def excite = { word ->
return "${word}!!"
}

// 调用一个闭包
excite("Groovy")
excite.call("Java")

8. 定义一个类
class Song {
def name
def artist
def genre
}

实例化这个类:
def sng = new Song(name:"Le Freak",
    artist:"Chic", genre:"Disco")
可以在构造器里给属性赋值

9. 使用?号防止空指针
def song=new Song()
sng2.artist?.toUpperCase() // 再调用的属性后,加上?号,可以防止空指针,相当于以前java复杂繁琐的!=null的判断。。。。
页: [1]
查看完整版本: groovy学习笔记