Gradle学习历程(一)— Groovy语言入门
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。因此在学习Gradle之前我们有必要学习一下Groovy这门语言。
Groovy介绍
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。
Groovy入门
既然Groovy是一门编程语言,那么必定有它的规则,那么我们首先得学习它们的语法,首先我们写第一行Groovy代码。
安装IDE
- 安装Eclipse
- 安装Groovy插件,如下图
输入插件地址:http://dist.springsource.org/snapshot/GRECLIPSE/e4.5/
请根据你们自己Eclipse的版本安装对应的版本,获取不同版本的地址可以浏览[https://github.com/groovy/groovy-eclipse/wiki]
编写第一行代码
- 新建一个Java项目
- 新建一个Groovy类
3.编写第一行代码
public class GroovyTest{
/**
* @param args
*/
public static void main(def args){
println("Hello Groovy");
}
}
- 运行
输入出:Hello Groovy
Groovy语法
- Groovy注释标记和Java一样,支持//或者/**/
- Groovy数据类型
Groovy中支持动态类型,即定义变量的时候可以不指定其类型。Groovy中,变量定义可以使用关键字def。注意,虽然def不是必须的,但是为了代码清晰,建议还是使用def关键字。
def variable1 = 1 //可以不使用分号结尾
def varable2 = "Groovy"
def int varable3 = 1 //变量定义时,也可以直接指定类型
3.Groovy方法定义
//无类型的函数定义,必须使用def关键字
def func(){
last_line //最后一行代码的执行结果就是本函数的返回值
}
//如果指定了函数返回类型,则可不必加def关键字来定义函数
String getString(){
return "I am a string"
}
4.Groovy字符串
def static testString() {
def str = "Groovy"
println("My name is $str") //单引号''中的内容严格对应Java中的String,不对$符号进行转义
println('My name is $str') //双引号""的内容则和脚本语言的处理有点像,如果字符中有$号的话,则它会$表达式先求值。
println('''My name
is
$str
''') //三个引号'''xxx'''中的字符串支持随意换行 (不过字符串中的格式符都会被保留,包括回车和tab)
def result = "My name is " + str //跟java一样,如果你需要把一个字符串写在多行里,可以使用+号连接字符串
println(result)
}
输出
My name is Groovy
My name is $str
My name
is
$str
My name is Groovy
5.容器
Groovy中的容器类很简单,就三种:
1. List:链表,其底层对应Java中的List接口,一般用ArrayList作为真正的实现类。
def static testList() {
def mList = ["abc","123","grooby"] //List由[]定义,其元素可以是任何对象
mList.add(1) //添加一个元素
mList<< "come on" //添加一个元素
mList.each{str->
println str
} //迭代
}
输出:
abc
123
grooby
1
come on
2. Map:键-值表,其底层对应Java中的LinkedHashMap。
def static testMap() {
def map=['name':'john','age':14,'sex':'boy']
map=map+['weight':25] //添加john的体重
map.put('length',1.27) //添加john的身高
map.father='Keller' //添加john的父亲
println map['father'] //通过key作为下标索引
println map.length //通过key作为成员名索引
map.each {
key,value ->
println("key = $key value = $value");
} //迭代
}
闭包(Closure)
闭包是用{符号括起来的代码块,它可以被单独运行或调用,也可以被命名。类似‘匿名类’或内联函数的概念。
定义闭包的格式
def <name> = {[param1,param2,... ->]//这个箭头很关键。箭头前面是参数定义,箭头后面是代码
//执行的代码
...
}
示例
定义一个闭包
public static void main(def args){
//定义闭包
def myClosure = {
String str ->
println(str)
}
//调用闭包
myClosure("Hello Groovy")
myClosure.call("Hello Groovy")
//闭包也可以作为方法参数
testClosure ({
println("Hello Groovy")
})
//当闭包作为方法的最后一个参数也可以省略括号
testClosure {
println("Hello Groovy")
}
}
def static testClosure(Closure closuse) {
closuse()
}
类
Groovy类和java类一样,你完全可以用标准java bean的语法定义一个groovy 类。但作为另一种语言,我们可以使用更groovy的方式定义和使用类,这样的好处是,你可以少写一半以上的javabean代码。
1. 不需要public修饰符
如前面所言,groovy的默认访问修饰符就是public,如果你的groovy类成员需要public修饰,则你根本不用写它。
2. 不需要类型说明
同样前面也说过,groovy也不关心变量和方法参数的具体类型。
3. 不需要getter/setter方法
不要奇怪,在很多ide(如eclipse)早就可以为序员自动产生getter/setter方法了。在groovy中,则彻底不需要getter/setter方法——所有类成员(如果是默认的public)根本不用通过getter/setter方法引用它们(当然,如果你一定要通过get/set方法访问成员属性,groovy也提供了它们)。
4. 不需要构造函数
不在需要程序员声明任何构造函数,因为groovy自动提供了足够你使用的构造函数。不用担心构造函数不够多,因为实际上只需要两个构造函数(1个不带参数的默认构造函数,1个只带一个map参数的构造函数—由于是map类型,通过这个参数你可以在构造对象时任意初始化它的成员变量)。
5. 不需要return
Groovy中,方法不需要return来返回值吗?这个似乎很难理解。看后面的代码吧。
因此,groovy风格的类是这样的:
6. 不需要()号
Groovy中方法调用可以省略()号(构造函数除外),也就是说下面两句是等同的:
person1.setName 'kk'
person1.setName('kk')
示例
创建一个Groovy类
class Person{
def name
def age
String toString() {
"name = $name age = $age"
}
}
调用一个Groovy类
def person = new Person()
person.age = 16
person.name = "groovy"
println person
Groovy API
前面已经介绍了Groovy一些基本的语法,要想更加全面的了解Groovy,我们需要去查看它的API。
Groovy的API文档位于 http://www.groovy-lang.org/api.html