Gradle系列之Groovy基础篇

原文发于微信公众号 jzman-blog,欢迎关注交流。

上一篇学习了 Gradle 的入门知识,Gradle 基于 Groovy,今天学习一下 Groovy 的基础知识,Groovy 是基于 JVM 虚拟机的一种动态语言,语法与 Java 语法类似,Groovy 完全兼容 Java,每个 Gradle 文件都是一个 Groovy 脚本文件,Gradle 文件基于 Groovy 语法,而 Groovy 又兼容 Java,故可以在 Gradle 文件中写 Java 代码,在此基础上增加了很多新特性,如支持闭包、DSL等,可以说 Groovy 是一门非常灵活的动态脚本语言,阅读本文之前可以先阅读下面这篇文章:

Gradle系列之初识Gradle

下面针对 Gradle 来学习一下 Groovy 的一些基础知识。

字符串

集合

方法

JavaBean

关于闭包

字符串

说一个 Groovy 的特性,在 Groovy 中分号不是必须的,其单引号是双引号都定义的是一个字符串常量,不同之处是单引号是纯粹的字符串常量,不会对该字符串里面的表达式做运算,而使用双引号定义的字符串常量可以使用合法表达式做相关运算,测试代码如下:

task stringTest{ //使用def关键字定义变量, def str1 = "双引号" def str2 = '单引号' println "双引号定义的字符串:"+str1 println "双引号定义的字符串:"+str1.class println "单引号定义的字符串:"+str2 //变量动态变化 str1 = true; println "双引号定义的字符串:"+str1.class //使用$运算符 println "双引号定义的字符串:${str1}" //只有一个变量的时候可以省去中括号 println "双引号定义的字符串:$str1" //单引号定义的字符串不能使用表达式进行运算 println '单引号定义的字符串:$str2' }

下面是执行结果,参考如下:

PS E:\Gradle\study\Groovy> gradle stringTest > Configure project : 双引号定义的字符串:双引号 双引号定义的字符串:class java.lang.String 单引号定义的字符串:单引号 双引号定义的字符串:class java.lang.Boolean 双引号定义的字符串:true 双引号定义的字符串:true 单引号定义的字符串:$str2 BUILD SUCCESSFUL in 1s 集合

Groovy 中也有集合的概念,主要看一下常用的 List、Map,下面将对 List 和 Map 常用操作进行介绍。

那么如何在 Groovy 中定义 List 呢,Groovy 中的 List 的定义方式类似于 Java 中的数组,具体操作参考下面代码:

task list{ //定义List def list = [1,2,3,4,5,6]; def weekList = ['星期一','星期二','星期三','星期四','星期五','星期六','星期日']; println "list的类型:"+list.class println "weekList的类型:"+weekList.class //访问集合里面的元素 println '第一个元素:'+list[0]//访问第一个元素 println '第二个元素:'+list[1]//访问第二个元素,以此类推 println '最后一个元素:'+list[-1]//访问最后一个元素 println '倒数第二个元素:'+list[-2]//访问倒数第二个元素,以此类推 println '某个范围内元素:'+list[2..4]//访问某个范围内元素,以此类推 //使用each遍历集合中的元素 weekList.each{ //使用it作为迭代的元素变量,不能写错喔 println it } }

下面是上述代码的执行结果,参考如下:

PS E:\Gradle\study\Groovy\ListMap> gradle list > Configure project : list的类型:class java.util.ArrayList weekList的类型:class java.util.ArrayList 第一个元素:1 第二个元素:2 最后一个元素:6 倒数第二个元素:5 某个范围内元素:[3, 4, 5] 星期一 星期二 星期三 星期四 星期五 星期六 星期日 BUILD SUCCESSFUL in 2s

那么如何在 Groovy 中定义 Map 呢,Groovy 中的 Map 当然也是键值对,具体定义及操作参考下面代码:

task map{ //定义Map def map = ['name':'Groovy', 'age':10]; println "map的类型:"+map.getClass().name; //访问Map里面的元素 println map.name; println map['name']; //遍历Map中的元素 map.each{ println "Key:${it.key},value:${it.value}" } }

下面是上述代码的执行结果,参考如下:

PS E:\Gradle\study\Groovy\ListMap> gradle map > Configure project : map的类型:java.util.LinkedHashMap Groovy Groovy Key:name,value:Groovy Key:age,value:10 BUILD SUCCESSFUL in 2s

关于 Groovy 的集合就了解这么多。

方法

Groovy 中的方法和 Java 中的方法类似,只是写法上更加灵活,Groovy 中 return 不是必须的,在不写 return 的时候,Groovy 会将最后一句代码作为该方法的返回值。代码块指的是一段被花括号包围的代码,Groovy 中可将代码块作为一个参数进行传递,可以参考前面关于集合的遍历部分,参考代码如下:

task method{ //方法调用 methodA(1, 2) methodA 1, 2 //获取方法返回的结果 def a = methodA 10, 20 println '获取方法返回的结果:'+a //代码块作为参数传递 def list = [1,2,3,4,5]; list.each( //闭包参数 { // println it } ) //Groovy规定,如果方法的最后一个参数是闭包,可以直接放到方法外面 list.each(){ // println it } //简写方式 list.each{ println it } } //方法的定义 def methodA(int a, int b){ println a + b //Groovy中return语句不是必须的,默认将最后一句代码的结果作为返回值 a + b }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwxwfy.html