we new

Groovy: 只为更短而生

    这段时间的任务需要用到Groovy知识,然后学习了一波,感觉还是跟之前学的编程语言相比更加简便,更加灵活。之后逛知乎的时候,有人评论说超过两百行的代码,都不用这类语言,我表示只是小白不多说~这几天接触下来,给我的感觉是,Groovy代码写的越短就感觉越牛批!所以下面就介绍怎么用更短的代码来代替。暂时涉及到的都是比较基础的代码部分,参考资料是 《Groovy程序设计》 Groovy入门教程 (p.s.《Groovy in action》英文版900多页,等有时间了再去看~)

    文章的结构由浅入深。引用一句别人说的话就是,“groovy对于对象是什么类型并不关心,一个变量的类型在运行中随时可以改变,一切根据需要而定。”

这个GString绝对不是只多加了一个G

双引号变单引号,少的不止是两个点~

1
2
println "hello $value"
println 'hello '+value
  • 单引号:字符常量,不会进行运算
  • 双引号:字符串表达式,可以进行求值

能用符号解决的事儿,绝对不多写一个字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
company = {it.write("$company")}
price = {it.write("$price")}
quote = "Today ${campany} stock closed at ${price}"
stocks.each{key,value ->
company = key
price = value
println quote
}
company = {->company}
price = {->price}
quote = "Today ${campany} stock closed at ${price}"
stocks.each{ key,value ->
company = key
price = value
println quote
}
quote = "Today ${-> campany} stock closed at ${-> price}"
stocks.each{key,value ->
company = key
price = value
println quote
}

多行字符串:轻松愉快

1
2
3
4
5
6
7
println '''balabala
balabala
balabala '''
println """balabalabala
balabala $bala
balabala"""

专业list 30年

添加元素so easy

1
2
list.add('so easy')
list << 'so easy'

说一句话,each是真心好用~

1
2
3
4
5
6
7
8
9
10
11
for(i 0 .. <lst.size()){
println "${lst[i]}"
}
lst.each{
println "${it}"
}
lst.each{
println it
}

你可能不懂-1的地位

1
2
println lst[0..<lst.size()]
println lst[0..-1]

each 与 collect

1
2
3
4
5
6
7
8
doubled = []
lst.each{
doubled<<it*2
}
doubled = lst.collect{
it*2
}

所以你以为用collect是真的ok了~

1
2
3
lst.collect{it.size}
lst*.size()

所以你以为短的就厉害了吗~

1
2
3
4
5
lst.each{count+=it.size()}
println lst.collect{it.size()}.sum()
println lst.inject(0){carrOver,element->carrOver+element.size()}
  • each: 适用于对于集合进行迭代
  • collect: 适用于需要返回每个元素操作后的结果
  • inject: 适用于累计的结果

还有Map在List的尽头等着你

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
println language['java']
println language['c++']
println language.java
println language.'c++'
map.each{entry->
println "$entry.key : $entry.value"
}
map.each{key, value->
println "$key : $value"
}

教两个单词:every和any

1
2
3
4
5
6
7
println langs.any{ language, anthor->
language =~ "[^A-Za-z]"
}
println langs.any{ language, author->
language =~ "[~A-Za-z]"
}

groupBy:我可能遇到了一个假Map,而它可能是真的数据库

1
2
3
4
groupByFristName = friends.groupBy{it.value.split(' ')[0] }
groupByFristName.each{fristName,buddies ->
println "$firstName: ${buddies.collect {key,fullName->fullName}.join(', ')}"
}

Groovy框架简介

引用了知乎-孙岚的回答
Gradle,自动化构建工具,通过简单编写Groovy脚本,便可进行依赖管理并完成项目构建;
Spock,测试框架,可通过其特有的DSL编写测试案例;
Grails,Web开发框架,无需自行编写脚手架代码,可用来快速开发;
Griffon,Swing开发框架,其灵感来自于Grails。


声明: 本文转载前需与作者联系并标明出处
分享到: