1. Groovy  # 
- Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其它特性
 
- Groovy完全 兼容Java语法
 
2. Groovy语法  # 
2.1 字符串  # 
- 可选类型定义
 
- 字符串可以用单引号,双引号,和三个单引号的表达方式
 
def name='zhufeng'
println 'hello $name'
println "hello $name"
println '''hello
 $name'''
2.2 定义class  # 
- 编译器给属性自动添加getter/setter方法
 
- 属性可以直接用点号来获取
 
class Person{
    String name
    int age
    Person(name,age){
        this.name = name
        this.age = age
    }
}
Person p = new Person('zhufeng',10)
println p.name
p.setAge(11)
println p.age
2.3 assert  # 
def version =1
assert version == 1
println(version)
2.4 集合API  # 
2.4.1 List  # 
def range = 0..4
println range.class
assert range instanceof List
2.4.2 ArrayList  # 
def coll = ["Groovy", "Java", "Ruby"]
assert  coll instanceof Collection
assert coll instanceof ArrayList
assert coll.size() == 3
assert coll.getClass() == ArrayList
添加元素
coll.add("Python")
coll << "Smalltalk"
coll[5] = "Perl"
查找元素
assert coll[1] == "Java"
2.4.3 LinkedHashMap  # 
def maps = [name:'zhufeng',age:10]
maps.home = 'beijing'
assert maps.size() == 3
assert maps.getClass() == LinkedHashMap
2.5 循环  # 
for(i = 0; i < 5; i++){
  println i
}
for(i in 0..5){
  println i
}
2.6 函数  # 
2.6.1 定义一个函数  # 
最后一行的为返回值  不需要用return 
def stage(){
} 
2.6.2 参数类型  # 
String function(arg1,args2){
}
def  nonReturnTypeFunc(){
     last_line   
}
String  getString(){
   return "I am a string"
}
2.7 闭包  # 
- 闭包是一种数据类型,它代表了一段可执行的代码
 
- 闭包是一个类型为
groovy.lang.Closure的代码块 
- 闭包可以赋值给变量,作为参数传递给方法,并且像普通方法一样来调用
 
- 闭包可以访问上下文的变量,函数不可以
 
def xxx = {paramters -> code} 
def xxx = {无参数,纯code}  这种case不需要->符号
`
2.7.1 闭包格式  # 
- 闭包[closureParameters->] 是可选的,参数的类型也是可选的
 
- 如果我们不指定参数的类型,会由编译器自动推断。如果闭包只有一个参数,这个参数可以省略,我们可以直接使用it来访问该参数
 
{
    [closureParameters -> ] 
    statements 
}
def it1 = { it -> println it }
def it2 = { name -> println name }
def it3 = { String x, int y -> println "${x} 's value is ${y}" }
it1('aaa')
it2('bbb')
it3('ccc',10)
2.7.2 闭包返回值  # 
- 闭包总会返回一个值,返回值是闭包的最后一条语句的值(如果没有显式的return语句)
 
def name2 = 'zhufeng'
def greeting = {
    'hello ' + name2
}
println greeting()
2.7.3 闭包作为方法参数  # 
Integer increment(Closure closure, Integer count){
  closure() + count
}
assert increment({ 10 }, 2) == 12
3. Groovy实例  # 
def stage(name,closure){
    name+closure()
}
def r = stage('Preparation'){
    5
}
println r