Groovy基础语法

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 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基础语法)