Groovy 运行于 JVM 之上,然而其对动态语言、函数式编程范式以及元编程功能的加持所带来的表现力和简洁性可以说甩了 Java 几条街。我们可以利用 Groovy 的所有动态功能构建高性能的 JVM 应用、将开发效率提高几个数量级! 再比如说我们用的 CI 系统 Jenkins,其 Pipeline 的编排 Jenkinsfile 文件就是用 Groovy 来书写,除此之外还有很多应用 Groovy 的地方。这就是我们为什么要学它!
本文实验所用 OS 为 CentOS7,这里介绍使用 sdk 工具来安装 Groovy 的方法。
curl -s get.sdkman.io | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
一句话搞定!
sdk install groovy
groovy -v
一切就绪
[root@localhost ~]# vim Hello.groovy
[root@localhost ~]# more Hello.groovy
println "Hello World From Groovy !"
[root@localhost ~]# groovy Hello
Hello World From Groovy !
两大优点:表现力 + 简洁!!!
用 Java 写一段代码如下:
public class Greetingss {
public static void main( String[] args ) {
for( int i=0; i<3; i++ ) {
System.out.println("ho ");
}
System.out.println("Merry Groovy");
}
}
用 Groovy 重构一遍如下:
for(i in 0..2) {
print 'ho '
}
print 'Merry Groovy'
看看两种语言的信噪比对比,真是给人不可估量的感动!
可以避免代码中的大量 null 引用的判断
def foo( str ) {
str?.reverse() // 仅当 str 不为 null 时 reverse 才会执行
}
这可以帮我们省多少个if
啊!!!
与 Java 相比,Groovy 的异常处理少了很多繁文缛节
对于那些不想处理或者不适合在代码当前层次处理的异常,Groovy 对用户不做任何要求,任何用户未处理的异常会自动传递到高一层,我们啥也不用写:
def openfile( fileName ) { // 无需 throws
new FileInputStream( fileName ) // 无需 try...catch... 处理
}
异常可以放到其调用代码中处理:
try {
openFile("nonexistfile")
} catch( FileNotFoundException ex ) {
print "Oops: " + ex
}
若捕获所有异常( Exception ),则上面 catch 中异常的类型都可省略:
try {
openFile("nonexistfile")
} catch( ex ) { // 省略类型表示可捕获所有异常
print "Oops: " + ex
}
静态方法内可使用 this 来引用 Class 对象,因此可以链式调用
class Wizard {
def static learn( trick, action ) {
//...
this
}
}
Wizard.learn('xxxx', {...})
.learn('yyyy', {...})
.learn('zzzz', {...})
1
whileFalse 2018-03-22 09:14:20 +08:00
Java 就是废话太多。然而这保证了静态检查的完备。
|
2
sujin190 2018-03-22 09:23:47 +08:00
@whileFalse #1 然而很多情况并不需要如此完备的静态检查
|
3
stanjia 2018-03-22 09:49:34 +08:00 2
动态一时爽,重构火葬场。
|
4
warcraft1236 2018-03-22 09:51:15 +08:00
感觉和 Python 一样很适合测试人员啊
|
5
HuHui 2018-03-22 10:44:42 +08:00
"构建高性能 JVM 应用"
??? |
6
closedevice 2018-03-22 10:46:58 +08:00
得了吧,之前写了半年多 groovy 后才知道没啥卵用,语法上的简洁早期开发有所收益,但后期维护的代价超过早期收益.
|
7
des 2018-03-22 10:54:15 +08:00 via Android
看到 curl xx | bash 就觉得心大,连个 https 都不加的
|
8
meowu 2018-03-22 11:15:28 +08:00 via Android
那缺点是什么呢?只有优点?
|
9
glues 2018-03-22 12:11:51 +08:00 1
不写测试的,无论动态静态,都是火葬场
|
10
miao1007 2018-03-22 12:21:38 +08:00 via Android
性能问题
|
11
sorra 2018-03-22 13:07:05 +08:00
你也在网上冲浪啊!
|
12
somebody 2018-03-22 14:06:23 +08:00
动态一时爽,重构火葬场。去年用 Groovy 写了个 Android 用的 Gradle 插件,20 个 Groovy 文件,1000 行代码。
很酸爽,重构函数名,调用的地方就是不像 Java 一样报错,眼睁睁瞅着调用的地方没跟着变。 Kotlin 了解一下 |
13
justinwu 2018-03-22 15:43:17 +08:00 via iPhone
感觉没 kotlin 有前景,android 开发上 Google 把 kotlin 纳入正房,对 kotin 影响非常深远,
google android 开发官方推特上现在天天发 kotlin 的奇技淫巧。 |
14
RubyJack 2018-03-22 16:04:01 +08:00
动不动就高性能,高并发什么的,歪风邪气也不知道谁带起来的
|
15
mritd 2018-03-22 16:08:39 +08:00
"构建高性能 JVM 应用"
??? |
16
mritd 2018-03-22 16:09:01 +08:00
我还以为给我讲 JVM 优化的...开心的一比
|
17
huclengyue 2018-03-22 17:27:36 +08:00 via Android
kotlin 了解一下
|
18
kaneg 2018-03-22 18:12:39 +08:00 via iPhone
上 kotlin 吧,现在选择 grovvy 有点 49 年参加国民党的感觉
|
20
jeffreyning 2018-11-02 13:06:46 +08:00
公司在用 groovy 结合 springboot 开发,效率很高。接口层用的都是 springboot、springmvc 和 springcloud 的注解,业务实现用的 groovy 写速度快还支持热部署,没有用 grails 框架,用的这个 groovy 框架 micro-mvc,比 grails 胜在兼容性强,兼容 spring 体系各种 mvc 框架。
|