参考博客
http://www.jianshu.com/p/e8dec95c4326
http://ifeve.com/groovy-syntax/
Groovy 是 Apache 旗下的一门基于 JVM 平台的动态/敏捷编程语言,在语言的设计上它吸纳了 Python、Ruby 和 Smalltalk 语言的优秀特性,语法非常简练和优美,开发效率也非常高,并且,Groovy 可以与 Java 语言无缝对接,在写 Groovy 的时候如果忘记了语法可以直接按Java的语法继续写,也可以在 Java 中调用 Groovy 脚本,都可以很好的工作,这有效的降低了 Java 开发者学习 Groovy 的成本。Groovy 也并不会替代 Java,而是相辅相成、互补的关系。
动态语言vs静态语言 http://blog.csdn.net/suchang1127/article/details/49299527
我们认为在脚本构建时,一个内部的 DSL(基于一个动态语言) 相对于 XML 的优势是巨大的.有这么多的动态语言, 为什么选择 Groovy? 答案在于 Gradle 的运行环境. 虽然 Gradle 以一个通用构建工具为核心, 但是它的重点是Java项目. 在这样的项目中, 显然团队每个成员都对Java 非常熟悉. 我们认为构建应尽可能对所有团队成员都是透明的,所以选择了 Groovy.你可能会说,为什么不直接使用 Java作为构建脚本的语言.我们认为这是一个很有用的问题.对于你的团队,它要有最高的透明度和最低的学习曲线, 也就是说容易掌握. 但由于Java的限制,这样的构建语言不会那么完美和强大. 而像 Python,Groovy 或 Ruby语言用来作为构建语言会更好. 我们选择了 Groovy 是因为它给 Java开发人员提供了迄今为止最大的透明度. 其基本的符号和类型与 Java 是一样的,其封装结构和许多其他的地方也是如此. Groovy 在这基础上提供了更多的功能, 而且与 java 有共同的基础.
Groovy在结尾可以没有分号
def single = 'c'
def singletwo = 'c${single}'
def mul = "c"
def multwo = "c${single}"
println single
println singletwo
println mul
println multwo
//output
c
c${single} #单引号是纯粹的字符串常量
c
cc
字符串可以使用单引号和双引号,(在java中单引号只能定义一个字符),不同之处在于单引号标记的是纯粹的字符串常量,但是双引号可以对字符串的表达式做运算
System.out.println("Hello groovy")
System.out.println "Hello groovy"
println("Hello groovy")
println "Hello groovy"
上面4个方法打印结果都是相同的,在groovy中函数的参数可以写到后面不适用括号,多个参数用逗号分开
int method(String agr){
return 1
}
int method(Object o){
return 2
}
Object o = "obejct"
int result = method(o)
println "${result} --> (2 , java)(1,groovy)"
//output
1 --> (2 , java)(1,groovy)
在java中result是2,在groovy中结果是1.原因在于,Java 使用静态数据类型,o 被声明为 Object 对象,而 Groovy 会在运行时实际调用方法时进行选择。因为调用的是 String 类型的对象,所以自然调用 String 版本的方法。
闭包是groovy很重要的一个特性,是DSL的基础。闭包就是一个代码块
def eachLine(lines , closure){
for(String line: lines){
closure line
}
}
eachLine( 'a'..'z', {print "${it} "})
eachLine使我们定义的方法,接收两个参数,第二个参数是一个闭包,’a’..’z’可以理解为全部的小写字母集合,我们在调用eachLine方法时传入的闭包就是打印传入的参数,it是第一个参数
def list = [1,"cat",2,3,4,5,"111","heloo"]
list.each{ println it} //打印集合
println("\n\n")
list.sort() //排序
list.each{println it} //打印集合
//fun 打印文本的内容
def path = "/home/study/gradle/groovy/READ.txt"
//很简单吧
new File(path).eachLine('UTF-8'){
println it
}
看了好多关于groovy的博客,各种语法和groovy的api,使用起来比java更加简练,这也是动态语言的优势,这里主要了解一下groovy的闭包就可以了,因为是gradle的基础。