Groovy核心语法总结

简介: Groovy是一种基于JVM,功能强大、类型可选,动态的、可与Java无缝衔接的编程语言。Groovy语法简洁、易于学习,可以大大提高开发人员的工作效率,可为Java程序添加强大的功能,包括脚本功能、特定领域的语言编写、运行时和编译时元编程以及函数式编程。本文将快速介绍核心语法,让读者快速入门。

Java当前是企业级开发中非常重要的一种语言,它是强类型的语言,在编写代码时,会严格对类型进行检测,这样大大提高了程序的稳定性,同时也降低了Bug发生的概率。但是,有的时候,我们希望Java能不能具有类似JavaScritpt相关的特点,如不对类型进行严格检测,且具有动态脚本的特点,可以作为一种脚本引擎来实现灵活的逻辑处理。

1 Groovy是什么

     哪里有需求,哪里就有市场。基于这种朴素的想法,开源社区也给我们开发者提供了一种非常好的脚本语言Groovy,根据官方介绍,Groovy是一种基于JVM,功能强大、类型可选(默认是弱类型的,也可以通过注解开启类型检测)、动态的,可与Java无缝衔接的编程语言。Groovy语法简洁、易于学习,可以大大提高开发人员的工作效率,可为Java程序添加强大的功能,包括脚本功能(scripting capabilities)、特定领域的语言编写(Domain-Specific Language)、运行时和编译时元编程( meta-programming )以及函数式编程(functionalprogramming)。

     官网为 http://www.groovy-lang.org , 官网页面截图如下:

1(32).jpg    注意:当前Groovy最新版本为4.0,不过是alpha版本,还不太稳定。商业使用建议采用 Groovy 3.0.8 

2 Groovy核心语法

     Goovy语言构建在强大的JVM之上,在设计时,综合考虑了其他编程语言的优势特征,如添加了Python和Ruby等语言的特征,即动态类型转换、闭包和元编程支持。这为Java开发者提供了最流行的编程语言特性。如果将Java语言比作老虎,那么Groovy就是翅膀,二者配合起来,就是如虎添翼。下面给出该语言的核心语法:

//////////////////////////////////////////////////////////////////////////定义变量defx=2//打印printlnx/*不同类型也可以赋值*/x="hello"printlnxmsg="world"println"hello "+msg//hello worldprintln3/2// 1.5println3// 2   // 3println3%2// 1println3*2// 6 println3+2// 5println3**2// 9 println3==3//trueStringstr="Hello"str=2.3//////////////////////////////////////////////////////////////////////////列表deflist= []
a=list.add("Java");
printlna//trueprintlnlist//[Java]list<<"F#"printlnlist//[Java, F#]printlnlist.remove("F#") //trueprintlnlist//[Java]printlnlist-"Java"// []list.addAll(["java","C#"])
list.each { println"$it"}
/*JavajavaC#*/list.eachWithIndex { it, i -> println"$i: $it"}
/*0: Java1: java2: C#*/ele=list.contains( 'java' )
printlnele//trueprintln'java'inlist//trueCollections.replaceAll(list,"java","Groovy")
printlnlist//[Java, Groovy, C#]//////////////////////////////////////////////////////////////////////////定义map类型defmyMap= [:]
myMap.put("XH",'123')
myMap.put("Name",'Jack')
myMap.each { println"$it.key: $it.value" }
myMap.eachWithIndex { it, i -> println"$i: $it"}
/*XH: 123Name: Jack0: XH=1231: Name=Jack*/printlnmyMap.containsKey('Name') //trueprintlnmyMap.containsValue('jack') // false 区分大小写printlnmyMap.keySet() //[XH, Name]printlnmyMap.values() //[123, Jack]//for迭代mapx=""for ( einmyMap ) {
x+=e.valuex+=" "}
printlnx//////////////////////////////////////////////////////////////////////////函数定义defsayMsg(msg="Groovy"){
"Hello,$msg"}
printlnsayMsg() //Hello,GroovyprintlnsayMsg('Java') //Hello,Java//////////////////////////////////////////////////////////////////////////if分支deffunc_if(x=0){
if(x<0) {
println"<0"    } elseif(x<20) {
println"[0,20)"    } else {
println">20"    }
}
printlnfunc_if(20) //null//for循环deffunc_for(){
defx=0for (iin0 .. 10) {
x+=i    }
printlnx//55x=0for( iin [1,2,3,4,5,6,7,8,9,10] ) {
x+=i     }
printlnx// 55}
func_for()
//////////////////////////////////////////////////////////////////////////Expando动态Bean类型,支持添加属性和方法defuser=newExpando(name:"Jack")
printlnuser//{name=Jack}user.xh="123"printlnuser//{name=Jack, xh=123}user.info= { 
println"Name: $name,XH:$xh"}
user.info() //Name: Jack,XH:123//////////////////////////////////////////////////////////////////////////扩展方法 和 MetaprogrammingString.metaClass.xxxFunc= {
println"xxxFunc"}
"str"?.xxxFunc() //xxxFunc////////////////////////////////////////////////////////////////////////classTestGroovyInterceptableimplementsGroovyInterceptable {
defsum(Integera, Integerb) { a+b }
definvokeMethod(Stringname, args) {
println"Invoke method: $name,args: $args"    }
}
deftest=newTestGroovyInterceptable()
//Invoke method: sum ,args: [2, 3]test?.sum(2,3) 
//Invoke method: power,args: [2, 3]test?.power(2,3)
////////////////////////////////////////////////////////////////////////importgroovy.transform.TypeChecked//类型检测@TypeCheckedIntegertestTypeCheck() {
//[Static type checking] - //Cannot assign value of type java.lang.String to variable of type java.lang.IntegerIntegernum="1"returnnum}
////////////////////////////////////////////////////////////////////////importgroovy.transform.CompileStatic//静态方法@CompileStaticintsum(intx, inty) {
x+y}
sum(2,7) //9//////////////////////////////////////////////////////////////////////////类classStudent {
//只读finalStringname="Jack"Integerage=0protectedvoidsetAge(Integerage) { 
this.age=age    }
definfo(){
"$name,$age,$tag"    }
//动态类型deftag}
defstu=newStudent()
stu.setAge(33)
stu.tag= [1,2,3] 
printlnstu.info() //Jack,33,[1, 2, 3]//////////////////////////////////////////////////////////////////////////JSON处理importgroovy.json.JsonOutputdefstrJSON=JsonOutput.toJson([stu])
println(strJSON) //[{"age":33,"tag":[1,2,3],"name":"Jack"}]////////////////////////////////////////////////////////////////////////importgroovy.json.JsonSlurperdefjsonSlurper=newJsonSlurper()
defobject=jsonSlurper.parseText('{ "name": "Jack", "xh" : "123"}')
println(object.name)
println(object.xh)
////////////////////////////////////////////////////////////////////////importgroovy.json.JsonSlurperdefjsonSlurper=newJsonSlurper()
Objectlst=jsonSlurper.parseText('[2, 3, 4, 5]')
lst.each { printlnit }


相关文章
|
Java
【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )
【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )
292 0
|
Java 编译器
Groovy 之 面向对象
Groovy 之 面向对象
Groovy 之 面向对象
|
Java 大数据 索引
Groovy 之基础语法,闭包(上)
Groovy 之基础语法,闭包(上)
Groovy 之基础语法,闭包(下)
Groovy 之基础语法,闭包(下)
|
JavaScript 前端开发 Java
跨界闭包之javascript,java,groovy
闭包之javascript,java,groovy
1613 0
|
Web App开发 JavaScript 前端开发
|
Java BI
《Groovy语言规范》-语法(二)
4.6.斜杠字符串 除了通常的带引号字符串,groovy提供斜杠字符串,使用/作为分隔符。斜杠字符串对于定义正则表达式和模式是特别有用的,因为不需要转义反斜杠。 一个斜杠字符串: def fooPattern = /.
1862 0