概述
gradle -groovy脚本
Groovy注释标记和Java一样,支持//或者/**/
Groovy语句可以不用分号结尾。Groovy为了尽量减少代码的输入,确实煞费苦心
Groovy中支持动态类型,即定义变量的时候可以不指定其类型。Groovy中,变量定义可以使用关键字def。注意,虽然def不是必须的,但是为了代码清晰,建议还是使用def关键字
字符串类型中双引号""的内容则和脚本语言的处理有点像,如果字符中有$号的话,则它会$表达式先求值。
Groovy中的容器类很简单,就三种:
List:链表,其底层对应Java中的List接口,一般用ArrayList作为真正的实现类。
Map:键-值表,其底层对应Java中的LinkedHashMap。
Range:范围,它其实是List的一种拓展。
def aList = [5,'string',true] //List由[]定义,其元素可以是任何对象
def aMap = ['key1':'value1','key2':true]
def aRange = 1..5 <==Range类型的变量 由begin值+两个点+end值表示
闭包,英文叫Closure,是Groovy中非常重要的一个数据类型或者说一种概念了。闭包的历史来源,种种好处我就不说了。我们直接看怎么使用它!
def aClosure = { //闭包是一段代码,所以需要用花括号括起来..
String param1, int param2 -> //这个箭头很关键。箭头前面是参数定义,箭头后面是代码
println"this is code" //这是代码,最后一句是返回值,
//也可以使用return,和Groovy中普通函数一样
}
Closure使用中的注意点
1. 省略圆括号
闭包在Groovy中大量使用,比如很多类都定义了一些函数,这些函数最后一个参数都是一个闭包。比如:
public static <T> List<T> each(List<T> self, Closure closure)
上面这个函数表示针对List的每一个元素都会调用closure做一些处理。这里的closure,就有点回调函数的感觉。但是,在使用这个each函数的时候,我们传递一个怎样的Closure进去呢?比如:
def iamList = [1,2,3,4,5] //定义一个List
iamList.each{ //调用它的each,这段代码的格式看不懂了吧?each是个函数,圆括号去哪了?
println it
}
上面代码有两个知识点:
each函数调用的圆括号不见了!原来,Groovy中,当函数的最后一个参数是闭包的话,可以省略圆括号。比如
def testClosure(int a1,String b1, Closure closure){
//do something
closure() //调用闭包
}
那么调用的时候,就可以这么调用
testClosure (4, "test", {
println "i am in closure"
} ) //括号可以不写..
即如下调用
testClosure 4,'test' ,{println "i am in closure ..."}
2. 如何确定Closure的参数
def iamList = [1,2,3,4,5] //定义一个List变量
iamList.each{ //调用它的each函数,只要传入一个Closure就可以了。
println it
}
查看List的Api可以了解到:each函数说明中,将给指定的closure传递Set中的每一个item。所以,closure的参数只有一个。
文件IO操作
整体说来,Groovy的I/O操作是在原有Java I/O操作上进行了更为简单方便的封装,并且使用Closure来简化代码编写。
例如 File类 http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/File.html
def targetFile = new File("fileName") <==File对象还是要创建的。
eachLine的唯一参数是一个Closure。Closure的参数是文件每一行的内容,其内部实现肯定是Groovy打开这个文件,然后读取文件的一行,然后调用Closure。
targetFile.eachLine{
String oneLine ->
printl noneLine
}
2 直接得到文件内容
targetFile.getBytes() <==文件内容一次性读出,返回类型为byte[]
注意前面提到的getter和setter函数,这里可以直接使用targetFile.bytes
3 使用InputStream.InputStream的SDK在 http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/InputStream.html
def ism = targetFile.newInputStream()
//操作ism,最后记得关掉
ism.close
4 使用闭包操作inputStream,以后在Gradle里会常看到这种搞法
targetFile.withInputStream{ ism ->
操作ism. 不用close。Groovy会自动替你close
}
5 写文件
def srcFile = new File("srcFile")
def targetFile = new File("targetFile")
targetFile.withOutputStream{ os->
srcFile.withInputStream{ ins->
os << ins //利用OutputStream的<<操作符重载,完成从inputstream到OutputStream
//的输出
}
}
最后
以上就是纯真铅笔为你收集整理的gradle-groovy脚本的全部内容,希望文章能够帮你解决gradle-groovy脚本所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复