Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy代码可以与Java代码很好地结合,也能用于扩展示有代码。因为其运行在 JVM 上的特性,Groovy可使用Java来编写,最终会被编译成xx.class文件在虚拟机中运行。因为它是一种敏捷开发语言,所以很适合用来变现Gradle脚本,所以在Gradle中被普遍运用。java
参考:https://www.bonusbits.com/wiki/HowTo:Install_SDKMan_on_MacOS_or_Linuxweb
$ curl -s "https://get.sdkman.io" | bash ps:卸载sdk $ rm -rf $sdkHome/.sdkman
安装成功后,表示咱们能够用sdk 命令来安装groovy了!!!json
sdk install groovy
看到成功后,表示groovy库安装成功。数组
https://www.jetbrains.com/idea/download/#section=mac
使用免费版的就能够了!bash
打开IDEA — 新建Groovy项目 — Groovy library 选择你安装groovy的路径就能够了。
ps:查看groovy路径通常在:/Users/xxx/.sdkman/candidates/groovy/
数据结构
在新建的项目里,src下面新建一个groovy Class,在其中编写以下代码,运行就ok啦!
示例代码:闭包
//groovy 脚本式写法 println "Hello World!"
groovy 中能够写和java如出一辙的代码,同时也能够用groovy的脚本特性,写简单的脚本语言。由于不少特性和java同样,所以这里只挑出和java不同的地方来说。curl
在java中,一个class文件的基本结构是:ide
pacakge xx.xx import xxxx class xxx { void xxx { //do something } }
在groovy中,就十分简单了:svg
package xx.xx (这个省了也能够运行,最好是加上,为了规范性) //do somthing
groovy既拥有脚本语言的特色,也拥有java的特色,所以它既可使用弱类型定义变量,也可使用强类型方式定义变量。示例以下:
//弱类型 def x = 10 //强类型 int y = 10
groovy中全部的基础类型都会被转换为对应的Class对象,好比:
基础类型 | 对象类型 |
---|---|
int | Integer |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
未指定类型的非整数,则会被转换为BigDecimal
可用以下式例验证:
def a = 0.1 println a.class
所以,在groovy中,全部的变量类型都是Object类型!
groovyz中定义字符串,有三种方式:
这种方式定义的字符串是不可变的,示例:
def name ='laosan'
这是可变定义字符串,能够接受变量。示例:
def say = "hello, ${name}"
这样定义的字符串,容许输入格式。示例:
def json = '''\ { "name":"winton", "age":20 } '''
这样就不用再使用java里的转义字符了.
基本结构以下:
def name = { params ->
//do something
}
示例1:
def say = { String word -> println word }
示例2:
def add = {a, b -> return a+b }
这个有点相似函数定义
示例1:
//upto(Number self, Number to, @ClosureParams(FirstParam.class) //是整形的一个方法,第一个参数是隐式的,第二个参数是number,第三个参数是一个闭包 def fab(number) { int result = 1 //闭包是能够写在括号外面的 1.upto(number) { num -> result *= num } //1.upto(number, { num -> result *= num}) // return result } println fab(5)
示例2:
String temp = "asda1sad2wdasd3" println temp.findAll { s -> s.isNumber()}
def list = [1,2,3,4,5]
def list = [1,2,3,4,5] as int[]
//默认规则 list.sort() //自定义排序规则 list.sort{c1, c2 -> return c1 > c2}
int[] array = [1,2,3,4,5]
//定义 def students = [ 1 : "张三", 2 : "李四", 3 : "Jhon" ] //索引 students[1] students.get(1) //添加 students.test = [hh:'1212'] //添加key为test,value为[hh:'1212'],还有不少种方式,这里不一一列举了 //遍历 students.each {student -> println student.key println student.value }
其实质是map是LinkedHashMap<Object,Object>,因此咱们能够听任任何类型的key 和value.
def range = 1..10 println range[0] //遍历 range.each { println it }
本质由list实现
class Person { String name int age } //动态添加属性 Person.metaClass.sex = 'male' // 动态添加方法 Person.metaClass.sayHi = { -> println "hello ${name}"} //构造参数 def person = new Person(name:'winton', age:15) //调用属性 println person.name //调用动态属性 person.sex = 'fmale' //调用动态方法 person.sayHi()
//序列化 println JsonOutput.toJson(person).toString() //反序列化 def var = '''{"sex":"male","age":16,"name":"winton"}''' JsonSlurper slurper = new JsonSlurper() Person person1 = slurper.parseText(var) as Person
def xml = ''' <layer id = "231"> <item > <shape>hello</shape> </item> </layer> ''' def xmlSlurper = new XmlSlurper() def layer = xmlSlurper.parseText(xml) println layer.item.shape.text() println layer.@id
本着学以致用的原则,通过以上的学习,再回头来看gradle文件彷佛就没那么迷糊了,本身写task也不会迷糊了。但愿有帮助到看到此文的同窗,也欢迎你们进群讨论!