春天花会开 2019-06-26
Groovy运行于JVM之上,然而其对动态语言、函数式编程范式以及元编程功能的加持所带来的表现力和简洁性可以说甩了Java几条街。我们可以利用Groovy的所有动态功能构建高性能的JVM应用、将开发效率提高几个数量级! 这就是我们为什么要学它!
注: 本文首发于 My 公众号 CodeSheep ,可 长按 或 扫描 下面的 小心心 来订阅 ↓ ↓ ↓
本文实验所用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', {...})
作者更多的SpringBt实践文章在此:
如果有兴趣,也可以抽点时间看看作者一些关于容器化、微服务化方面的文章: