Groovy学习记录(一)
为什么是Groovy?
要说Groovy一直都不是多火的东西,同时作为JVM上的语言,完全没有近年来谷歌强推的Kotlin火,但是学语言嘛,最重要的是开心,特别是工作中不是必须要用的语言。平常自己写一些辅助工作的小功能会用Java,像这类东西肯定是脚本语言更加适合,也自己学了一点热门的Python,但毕竟工作中一点都不用,想写个功能还得翻翻文档,而Java工作中常用,api根本不用看直接用,Python的效率优势反而没了,结果工作中常用的Java和JavaScript越来越熟练,Python就荒废了。但不得不说Java在写一些功能的时候是真的不爽,比如集合操作,工作中也写一点JavaScript,比较之下就更加不爽,之后Groovy在偶然的机会下就进入视线,试着用了一下,还真挺有意思,就开始想着认真学一下,要说自己为什么想学Groovy,大概就下面几点:
- 脚本语言,直接写直接用
- 兼容Java语法,学习曲线平滑
- 介绍中看到DSL相关的东西,觉得能拿来做些有意思的东西
- 看到有不少用Groovy给Java写单元测试的用法,感觉可以给工作上带来帮助
而且在网上还看到一个很有意思的说法,Groovy是真正的JavaScript,我也总结了一下:
虚假的JavaScript | 真正的JavaScript |
---|---|
可以在各种浏览器上运行,靠v8引擎和node.js也可以在服务端运行,但就是不能在JVM上运行 | 在JVM上运行 |
语法与api和Java有相似之处,但也有大量不同的地方 | 可以直接写Java代码 |
动态语言 | 动态语言,但是可以设置静态编译,能屈能伸 |
蹭热度的名字,一开始叫LiveScript | groovy:adj.时髦的; 吸引人的; 有趣的 包含美好的寓意 |
当然上面是开玩笑的,不过也体现出了Groovy吸引Java开发人员的地方。
快速开始
确实够快,因为做Java开发,肯定是有JDK的,只要再下载一个Groovy 50多M的包,解压之后把bin目录配置进Path变量就行了。
输入
1 |
|
展示了Groovy Java和系统版本,安装成功。
安装好之后就有命令行Groovy Shell和图形界面的Groovy Console可以用,也可以直接文本编辑器写groovy文件,例如:
1 |
|
然后切换到文件所在目录输入命令
1 |
|
运行展示结果。
初步学习就是看官方文档,先把
Differences with Java
和
The Groovy Development Kit
这两篇看个差不多就可以开始写脚本了。
自己写了两个小东西,主要是处理xml配置文件的,用到了
Processing XML
里面介绍的XmlSlurper,用起来很爽,基本上就是
1 |
|
就行了,简单愉快。
遍历目录:
1 |
|
定义集合与遍历集合:
1 |
|
舒服了。
还有个用的比较多的就是GString,Groovy中单引号是普通字符串,双引号是GString,可以直接用类似字符串模板的写法,上面已经出现过了:
1 |
|
有了这些其实就已经能提高不少效率了,而且为什么说Groovy学习曲线平滑?因为有的地方如果不太熟悉Groovy的api,可以去翻文档,也可以直接上自己熟悉的Java写法搞定的,效率UP。
Groovy in Action
Groovy中文资料还是有点少,Groovy in Action第一版倒是有中文的,但那都是07年的书了,年代有点久远,所以干脆就直接挑战一下Groovy in Action 第二版的英文版,锻炼一下自己阅读英文书籍的能力。目前看完了Part1的第一章和第二章。
第一章基本就是Groovy大型广告,介绍了Groovy的故事,Groovy的使用场景,快速开始和支持Groovy的IDE与文本编辑器的介绍。
第二章也是介绍了Groovy的一些基础内容,到没有一上来就讲什么运算符数据类型之类了,而是讲了和Java语法的比较,assert的用法,还有一些GroovyBeans,注解,grapes,GStrings,正则表达式,数字,集合,闭包,流程控制语句大致的介绍,其中有一点就是Groovy中的数字类型也是对象,所以会看到
1 |
|
这种看着怪怪的写法。
接下来就是Groovy编译器相关的内容。这里说到了有意思的一点,Groovy虽然是动态语言,但是与用解释器逐行解释的动态语言不同,Groovy是经过编译器编译再运行的,但是编译之后又怎么做到动态语言的特性的呢?以调用方法为例子,编译后的文件里不是直接调用的,而是
1 |
|
这样通过MetaClass对象进行调用,通过MetaClass对象可以实现动态语言的特性。
而使用注解
1 |
|
之后编译出来的文件就不去使用MetaClass对象调用方法。
总之趁着自己还有学习热情的时候多看点吧。