Gradle - Groovy基础1|8月更文挑战

153 阅读3分钟

前言

关于Gradle的文章很多,但是大多是以一些技巧为主,东敲西打看了之后可能解决了一些问题,但对于新的需求,gradle如何运用到项目中还是一知半解。我准备了系列教程。

Groovy基础

项目中build.gradle都是用groovy写的,不了解一下groovy怎么能看得懂呢?这里只需要知道groovy的一些基础知识,比如怎么定义变量,定义方法,方法怎么使用,闭包的使用,这些就差不多了。 首先要知道groovy是一种脚本语言,有下面三个特点:

  • 是一种动态语言,不需要编译直接生效
  • 是一种DSL,即Domain Specific Language(专门领域的编程语言,所以比较难阅读)
  • Groovy基于Java同时也像是一种脚本语言(基于java,这个看下面基本语法就明白了)

基本语法

  • 定义基本变量:
   def variable1 = 1   //可以不使用分号结尾
   def varable2 = "I am a person"
   def  int x = 1   //变量定义时,也可以直接指定类型
  • 字符串:
1  单引号''中的内容严格对应Java中的String,不对$符号进行转义
 
   def singleQuote='I am $ dolloar'  //输出就是I am $ dolloar
2  双引号""的内容则和脚本语言的处理有点像,如果字符中有$号的话,则它会$表达式先求值。
 
   def doubleQuoteWithoutDollar = "I am one dollar" //输出 I am one dollar
   def x = 1
   def doubleQuoteWithDollar = "I am $x dolloar" //输出I am 1 dolloar
3 三个引号'''xxx'''中的字符串支持随意换行 比如
 
   def multieLines = ''' begin
     line  1
     line  2
     end '''
  • 定义函数:
String testFunction(arg1,arg2){//无需指定参数类型
  ...
}

def  nonReturnTypeFunc(){
     last_line   //最后一行代码的执行结果就是本函数的返回值
}
 
//如果指定了函数返回类型,则可不必加def关键字来定义函数
String  getString(){
   return "I am a string"
}
  • 函数调用:
println("test") ---> println "test"
// 可以不加括号,但是建议:自定义的方法调用加上括号! API提供的方法调用可以不用括号
  • 数据类型:
  • java中的基础数据类型

在Groovy中所有事物都是对象,int count = 12; //这里的count其实是Integer类型,其他的使用和Java一样

  • 容器类

1.List


变量定义:List变量由[]定义,也可以赋予一些初始值,比如
 
def aList = [5,'string',true] //List由[]定义,其元素可以是任何对象
 
变量存取:可以直接通过索引存取,而且不用担心索引越界。如果索引超过当前链表长度,List会自动
往该索引添加元素
 
assert aList[1] == 'string'
assert aList[5] == null //第6个元素为空
aList[100] = 100  //设置第101个元素的值为10
assert aList[100] == 100
 
那么,aList到现在为止有多少个元素呢?
 
println aList.size  ===>结果是101

2.Map

Map由[:]定义,注意其中的冒号。冒号左边是key,右边是Value。key必须是字符串,value可以是任何对象。另外,key可以用''或""包起来,也可以不用引号包起来。比如

    def mapData = [:]
    mapData.put("name","test name")
    println(mapData.get("name"))//输出“test name”

3.闭包(Closure)

  • 定义:闭包,是一种数据类型,它代表了一段可执行的代码。他可以作为方法的参数,或者返回值,也可以独立运行

**

//自定义一个闭包
def aClosure = { //闭包是一段代码,所以需要用花括号括起来..
String param -> println("test closure,para = $param") //这个箭头很关键。箭头前面是参数定义,箭头后面是代码
        return 200 //返回值
    }
//调用这个闭包:(用call方法或者直接蚕食写在括号里面)
def count = aClosure.call("dml")
//    def count2 = aClosure("dml")
    println("$count")

在Gradle控制台看一下输出:

image.png