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<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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,134评论 9 118
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,558评论 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,771评论 1 10
  • You are…… You are the rain, the fog, it's the sun of my h...
    橘子君_澜阅读 1,013评论 0 3