您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > GROOVY基础语法
Groovy的基础语法Groovy的语法融合了Ruby、Python和Smalltalk的一些最有用的功能,同时保留了基于Java语言的核心语法。对于Java开发人员,Groovy提供了更简单的替代语言,且几乎不需要学习时间。语句Groovy的语句和Java类似,但是有一些特殊的地方。例如语句的分号是可选的。如果每行一个语句,就可以省略分号;如果一行上有多个语句,则需要用分号来分隔。x=[1,2,3]printlnxy=5;x=y+7printlnxassertx==12另外return关键字在方法的最后是可选的;同样,返回类型也是可选(缺省是Object)。动态类型像其他Script一样,Groovy不需要显式声明类型。在Groovy中,一个对象的类型是在运行时动态发现的,这极大地减少了要编写的代码数量。在Groovy中,类型对于值(varibles)、属性(properties)、方法(method)和闭包(closure)参数、返回值都是可有可无的,只有在给定值的时候,才会决定它的类型,(当然声明了类型的除外)。例如://Groovy动态类型myStr=HelloWorld由于使用了动态类型,不需要继承就可以得到多态的全部功能:classSong{@Propertylength@Propertyname}classBook{defpublicnamedefpublicauthor}defdoSomething(thing){printlngoingtodosomethingwithathingnamed=+thing.name}这里定义了两个Groovy类,Song和Book。这两个类都包含一个name属性。函数doSomething,它以一个thing为参数,并试图打印这个对象的name属性,但doSomething函数没有定义其输入参数的类型,所以只要对象包含一个name属性,那么它就可以工作。可见,Song和Book的实例都可以作为doSomething的输入参数。mySong=newSong(length:90,name:BurningDowntheHouse)myBook=newBook(name:OneDuckStuck,author:PhyllisRoot)doSomething(mySong)//printsBurningDowntheHousedoSomething(myBook)//printsOneDuckStuckdefdoSth=this.&doSomethingdoSth(mySong)doSth(myBook)在例子的最后,我们还创建了doSomething的一个函数指针doSth,最后的执行结果与调用doSoemthing是一样的。值得注意的是:与GroovyBeta不同,在使用新的JSRGroovy类时,类里面的所有的变量都必须加上def关键字或者private、protected或public这样的修饰符。当然,也可以用@Property关键字声明成员变量。在Script中则不必。字符串Groovy中的字符串允许使用双引号和单引号。当使用双引号时,可以在字符串内嵌入一些运算式,Groovy允许您使用与bash类似的${expression}语法进行替换。可以在字符串中包含任意的Groovy表达式。name=JamesprintlnMynameis${name},'00${6+1}'//printsMynameisJames,'007'Groovy还支持uXXXX引用(其中X是16进制数),用来表示特殊字符,例如u0040与@字符相同。大块文本如果有一大块文本(例如HTML和XML)不想编码,你可以使用Here-docs.here-docs是创建格式化字符串的一种便利机制。它需要类似Python的三重引号()开头,并以三重引号结尾。name=Jamestext=hellothere${name}howareyoutoday?asserttext!=nullprintln(text)在Groovy-JSR中,不再支持下面这种多行字符串,个人觉得似乎与Here-docs功能重叠:foo=hellotherehowarethings?println(foo)对字符串的操作1.contains字符串中是否包含子字符串,'groovy'.contains('oo')将返回true;2.count返回字符串中子字符串出现的次数,'groooovy'.count('oo')将返回3.3.tokenize根据分隔符将字符串分解成子串,'apple^banana^grap'.tokenize('^')返回['apple','banana','grape']。4.减操作'groovy'-'oo',结果是'grvy'。5.乘操作'oo'*3,结果是'oooooo'。Groovy主要结构接下来将展示Groovy的一些结构,包逻辑分支,类、闭包等等。逻辑分支if-else语句Groovy提供Java相同的if-else语句。x=falsey=falseif(!x){x=true}assertx==trueif(x){x=false}else{y=true}assertx==yGroovy也支持三元操作符。y=5x=(y1)?worked:failedassertx==workedswitch语句Groovy的switch语句兼容Java代码,但是更灵活,Groovy的switch语句能够处理各种类型的switch值,可以做各种类型的匹配:1.case值为类名,匹配switch值为类实例2.case值为正则表达式,匹配switch值的字符串匹配该正则表达式3.case值为集合,匹配switch值包含在集合中,包括ranges除了上面的,case值与switch值相等才匹配。x=1.23result=switch(x){casefoo:result=foundfoo//letsfallthroughcasebar:result+=barcase[4,5,6,'inList']:result=listbreakcase12..30:result=rangebreakcaseInteger:result=integerbreakcaseNumber:result=numberbreakdefault:result=default}assertresult==numberSwitch语句的工作原理:switch语句在做case值匹配时,会调用isCase(switchValue)方法,Groovy提供了各种类型,如类,正则表达式、集合等等的重载。可以创建自定义的匹配类,增加isCase(switchValue)方法来提供自定义的匹配类型。循环while和do循环Groovy支持Java相同的while循环,但目前暂不支持do循环x=0y=5while(y--0){x++}assertx==5for循环Groovy的for循环更简单,而且能够和各种类型的数组、集合、Map、范围等一起工作,我们稍候会详细介绍这些内容。//iterateoverarangex=0for(iin0..9){x+=i}assertx==45//iterateoveralistx=0for(iin[0,1,2,3,4]){x+=i}assertx==10//iterateoveranarrayarray=(0..4).toArray()x=0for(iinarray){x+=i}assertx==10//iterateoveramapmap=['abc':1,'def':2,'xyz':3]x=0for(einmap){x+=e.value}assertx==6//iterateovervaluesinamapx=0for(vinmap.values()){x+=v}assertx==6//iterateoverthecharactersinastringtext=abclist=[]for(cintext){list.add(c)}assertlist==[a,b,c]运行Groovy脚本你可以象使用Perl一样编写Groovy脚本,不需要class,不需要Main入口点,也不需要声明变量;此外,你还可以用def语句来定义自己的函数,并在脚本中使用它。像许多脚本语言一样,Groovy是在运行时解释的,无编译的代码在构建-运行周期中可以提供很多好处。运行时编译使Groovy成为快速原型设计、构建不同的实用程序和测试框架的理想平台。通过以下代码可以很简单的运行Groovy.groovyHelloWorld.groovy除了利用解释器来运行Groovy脚本外,Groovy提供了两种不同的解释器Shell,使所有有效的Groovy表达式可以交互地执行:1.运行groovysh启动命令Shell,可以输入Groovy语句直接执行2.运行groovyConsole启动Swing方式的Groovy控制台,这是一个简单的Groovy编辑器Groovy脚本实际上是字节码级别的Java类。因此,还可以用groovyc编译Groovy脚本。可以通过命令行或者Ant使用groovyc以生成脚本的类文件。这些类可以用普通java命令运行,只要classpath包括groovy.jar和asm.jar。(龙二少爷)Postedat09:09上午三月03,2006by龙二少爷inGroovy|迴響[0]星期二一月24,2006Groovy前言前言Groovy是基于JRE的脚本语言(Script),和Perl,Python等等脚本语言一样,它能以快速简洁的方式来完成一些工作:如访问数据库,编写单元测试用例(UnitTestCase),快速实现产品原型等等。Groovy是由JamesStrachan和BobMcWhirter这两位天才发明的,(JSR2412004年3月)。Groovy完全以JavaAPI为基础,使用了Java开发人员最熟悉的功能和库。Groovy的语法近似Java,并吸收了Ruby的一些特点,因此Groovy在某些场合可以扮演一种“咖啡伴侣”的角色。那么Groovy和Java相比,有什么变化呢?Groovy通过以下方式提供了一种敏捷的开发方式:不用编译。允许动态类型。合成结构容易。其脚本可以在普通Java应用程序中使用。提供一个shell解析器。这些特性使Groovy成为一种特别容易学习和使用的语言.我们先借用IBMGroovy教程中的例子,下面的代码利用了Freemarker模板引擎来创建一个Template对象,然后将内容打印到标准输出。例(1)是Java代码,例(2)是Groovy代码。可以看到二者非常的类似。code//简单的TemplateReaderJava类importjava.io.File;importjava.io.IOException;importfreemarker.template.Configuration;importfreemarker.template.Template;publicclassTemplateReader{publicstaticvoidmain(String[]args){try{Configurationcfg=Configuration.getDefaultConfiguration();cfg.setDirectoryForTemplateLoading(newFile(C:\\dev\\projects\\http-tester\\src\\conf));Templatetemp=cfg.getTemplate(vendor-request.tmpl);System.out.println(temp.toString());}catch(IOExceptione){e.printStackTrace();}}}/code和例2中的Groovy作为对比.precode
本文标题:GROOVY基础语法
链接地址:https://www.777doc.com/doc-4583037 .html