美文网首页
Groovy语言基础

Groovy语言基础

作者: 明明_白_白 | 来源:发表于2018-09-14 11:38 被阅读9次

    1.分号不是必须的
    2.单引号和双引号都可以定义一个字符串常量
    3.单引号没有运算能力,双引号有运算能力。双引号中调用变量的规则是一个美元符号紧跟着一对花括号,花括号里放表达式,比如{name}、{1+1}等,只有一个变量的时候可以省略花括号,如name 4.定义一个List如下: def num=[1,2,3,4,5,6] println num.getClass().name //输出可看到num类型是ArrayList println num[1] //访问第二个元素 println num[-1] //访问最后一个元素 println num[-2] //访问倒数第二个元素 println num[1..3]//访问第二道第四个元素 num.each{ //用来循环输出List中的元素,it就是正在迭代的元素 println '输出:'+it } 5.Map的用法,和List很相似,只不过它的值是一个K:V键值对,定义如下: def map1=['width':1024,'height':440] println "map的类型:"+map1.getClass().name println map1['width'] println map1.height map1.each{ println "Key:{it.key},Value:${it.value}"
    }
    输出:
    map的类型:java.util.LinkedHashMap
    1024
    440
    Key:width,Value:1024
    Key:height,Value:440
    6.方法的调用:
    1.在Groovy中方法是可以省略()的,非常简洁;
    2.return是可以不写的,在Groovy中,我们定义有返回值的方法时,return语句不是必须的。当没有return的时候,Groovy会把 方法执行过程中的最后一句代码作为其返回值。
    3.代码块是可以作为参数传递的,代码块是一段被花括号包围的代码,Groovy是允许其作为参数传递的,从下面代码可以看 出:
    //呆板的方法其实是这样
    num.each({println it})
    //我们格式化一下,会好看一点
    num.each({
    println it
    )}
    //Groovy规定,如果方法的最后一个参数是闭包,可以放到方法外面
    num.each(){
    println it
    }
    //然后方法的括号可以省略,就变成了我们经常看到的格式
    num.each{
    printl it
    }
    4.JavaBean:在Java中为了访问和修改JavaBean的属性,我们不得不重复生成getter/setter方法,并且使用它们,太繁琐,Groovy中得到了很大的改善:
    class Person{
    private String name
    }

    Person p=new Person()
    println "名字是:"+p.name
    p.name="eddy"
    println "名字是:"+p.name
    

    在没有给name赋值的时候,输出的是null,赋值后,输出的就是eddy了。
    在Groovy中,并不是一定要定义成员变量才能作为类的属性访问,我们直接用getter/setter方法,也一样可以当做属性访问:
    class Person{
    private String name
    public int getAge(){14}
    }
    Person p=new Person()
    p.name="eddy"
    println "名字是:{p.name},年龄:{p.age}"
    输出: 名字是:eddy,年龄:14
    通过上面的例子可以发现,我并没有定义一个age变量,但是一样可以通过p.age获取到该值,这是因为定义了getAge()方法。但是这个时候不能修改age的值,因为我们没有顶一个setter方法。
    7.闭包是Groovy的一个非常重要的特征,可以说它是DSL的基础。闭包不是Groovy的首创,但是它支持这一重要特征,这就使得代码灵活、轻量、可复用,再也不用像Java一样动不动就要用一个类了。虽然Java有了匿名内部类,但还是一样冗余不灵活。
    前面我们说过,闭包其实就是一个段代码块,下面我们就一步步实现自己的闭包,了解闭包的it变量的由来。集合的each方法我们已经非常熟悉了,实现一个类似的闭包功能:
    task closure<<{
    //使用我们自定义的闭包
    customEach{println it}

    }
    def customEach(closure){
    //模拟一个有10元素的集合,开始迭代
    for(int i in 1..10){
    closure(i)
    }
    }
    上面例子我们定义了一个方法customEach,它只有一个参数,用于接收一个闭包。那么这个闭包如何执行呢?很简单,跟一堆括号就是执行了。
    当闭包有一个参数时,默认就是it;当有多个参数时,it就不能表示了,我们需要把参数一一列出:

    task closure<<{
    //多个参数
    customEach{k,v->
    println "{k} is{v}"
    }

    }
    def customEach(closure){
    def map=['name':"jack","age":19]
    map.each{
    closure(it.key,it.value)
    }
    }
    从例子中我们可以看到,我们为闭包传递了两个参数,一个key,另一个value,例子中k、v、->用于把闭包的参数和主题分开。
    8.DSL(Domain Specific Language)的中文意思是领域特定语言,说白了就是专门关注某一领域的语言。Gradle就是一门DSL,它是基于Groovy的,专门解决自动化构建的DSL。

    相关文章

      网友评论

          本文标题:Groovy语言基础

          本文链接:https://www.haomeiwen.com/subject/npfogftx.html