美文网首页
Groovy基础语法

Groovy基础语法

作者: mc_luo | 来源:发表于2017-09-14 14:43 被阅读0次

    1.实现循环的方式

    1.for in

    for(i in 0..2){
       print 'hello world'
    }
    
    1. upto
    0.upto(2){
        print '$it'
    }
    

    3.times

    3.times{
        print '$it'
    }
    

    安全导航操作符

    1.null检查处理

    def foo(str){
        str?.reverse()
    }
    
    println foo('evil')
    println foo(null)
    输出结果为
    live
    null
    

    使用?.在空引用上调用reverse(),其结果产生了一个null,而没有抛出空指针异常

    基础语法

    1.return语句总是可选的

    int add(a,b){
         a+b
    }
    等同于
    int add(a,b){
        return a+b
    }
    

    2.分号分隔语句总是可选的
    3.方法和类默认为public
    4.?.操作符只有对象引用不为空时才分派调用
    5.函数引用可以不加()

    def variable1 = 1   //可以不使用分号结尾  
    def varable2 = "友盟分享"  
    int x = 1  //变量定义时,也可以直接指定类型
    println 'hello world' //引用println函数
    

    String

    1.单引号''中的内容严格对应Java中的String,不对$符号进行转义

    defsingleQuote='I am $ dolloar'  //输出就是I am $ dolloar
    

    2.双引号""的内容则和脚本语言的处理有点像,如果字符中有$号的话,则它会$表达式先求值。

    def aaa = "aaa" //输出aaa
    def x = 1  
    def result = "I am $x person" //输出I am 1 person
    

    3.三个引号'''xxx'''中的字符串支持随意换行 比如

       defmultieLines = ''' begin  
         line  1  
         line  2  
         end '''
    

    函数

    1.可选形参

    def log(x,base=10){
        x*base
    }
    println 11
    println 11,100
    println 100,10
    如输出结果所示,Groovy使用可选形参填充了缺失的实参
    110
    1100
    1000
    

    2.多赋值

    def spilteName(fullName){fullName.spilt(' ')}
    
    def(firstName,secondName) = spilteName('James Bond')
    println "$secondName $firstName $secondName"
    如输出所示
    Bond James Bond
    

    动态类型

    1.静态类型

    def takeHelp(Man man){
        man.help()
    }
    
    class Man{
    
        def help(){
            println 'man help'
        }
    }
    

    2.动态类型

    def takeHelp(man){
        man.help()
    }
    
    class Man{
    
        def help(){
            println 'man help'
        }
    }
    
    class Women{
        def help(){
            println 'women help'
        }
    }
    
    class Elephant{
        def help(){
            println 'elephant help'  
        }
    }
    下面调用takeHelp()
    takeHelp(new Man())
    takeHelp(new Women())
    takeHelp(new Elephant())
    如下输出所示
    man help
    women help
    elephant help
    

    闭包

    def pikeEven(n,block){
        for(int i=2;i<n:i+=2){
             block(i)
        }
    }
    
    pickEvent(10){number-> println(number)}
    

    容器类

    Groovy中的容器类很简单,就三种:
    List:链表,其底层对应Java中的List接口,一般用ArrayList作为真正的实现类。
    Map:键-值表,其底层对应Java中的LinkedHashMap。
    Range:范围,它其实是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
    

    Map

    def aMap = ['key1':'value1','key2':true]  
    /*Map由[:]定义,注意其中的冒号。冒号左边是key,右边是Value。key必须是字符串,value可以是任何对象。另外,key可以用''或""包起来,也可以不用引号包起来。比如  */
    def aNewMap = [key1:"value",key2:true]//其中的key1和key2默认被  
    处理成字符串"key1"和"key2"  
    /*不过Key要是不使用引号包起来的话,也会带来一定混淆,比如  */
    def key1="wowo"  
    def aConfusedMap=[key1:"who am i?"]  
    /*aConfuseMap中的key1到底是"key1"还是变量key1的值“wowo”?显然,答案是字符串"key1"。如果要是"wowo"的话,则aConfusedMap的定义必须设置成:  */
    def aConfusedMap=[(key1):"who am i?"]  
    /*Map中元素的存取更加方便,它支持多种方法:  */
    println aMap.keyName  //  <==这种表达方法好像key就是aMap的一个成员变量一样  
    println aMap['keyName']// <==这种表达方法更传统一点  
    aMap.anotherkey = "i am map"  //<==为map添加新元素
    

    Rang

    def aRange = 1..5 //<==Range类型的变量 由begin值+两个点+end值表示左边这个aRange包含1,2,3,4,5这5个值  如果不想包含最后一个元素,则  
    def aRangeWithoutEnd = 1..<5  //<==包含1,2,3,4这4个元素  
    println aRange.from  
    println aRange.to
    

    相关文章

      网友评论

          本文标题:Groovy基础语法

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