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 }


相关文章
|
JavaScript
Ant designe vue中有关默认组件引入不生效的问题;
Ant designe vue中有关默认组件引入不生效的问题;
312 0
|
机器学习/深度学习 算法 计算机视觉
SORT新方法AM-SORT | 超越DeepSORT/CO-SORT/CenterTrack等方法,成为跟踪榜首
SORT新方法AM-SORT | 超越DeepSORT/CO-SORT/CenterTrack等方法,成为跟踪榜首
812 0
|
关系型数据库 MySQL 数据库
PgSQL常用脚本语句
PgSQL常用脚本语句
884 0
|
存储 监控 BI
如何设置AD域用户仅登录到指定的计算机?AD域管理软件
本文介绍了如何使用AD域服务限制用户仅能登录特定计算机,包括通过属性设置和脚本实现。此外,提到了ADManagerPlus这款工具,它能够批量管理AD域用户,包括创建、修改用户信息,分配权限,并通过报表监控用户状态,有效提升AD域管理效率。
758 0
|
云计算
阿里云短信验证码平台服务收费价格表
阿里云短信验证码平台服务收费价格表,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
1126 0
|
人工智能 安全 JavaScript
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS纯血鸿蒙新特性
HarmonyOS 3.1引入了Stage模型,增强ArkTS语言、应用程序框架、Web、ArkUI等子系统能力。新增功能包括Ability框架的Stage开发模型、ArkUI组件能力提升、应用包管理接口、公共基础类库支持Buffer读写、Web服务文档预览及编辑、图形图像编解码支持等。从API 9开始,Stage模型成为主要开发模型,支持更灵活的应用生命周期管理和窗口调度,提供更好的组件与窗口弱耦合体验。此外,HarmonyOS NEXT开发者预览版实现了全面自研,被称为“纯血鸿蒙”,具备自主可控、高度弹性、更强的安全性和隐私保护特性。
950 21
|
JavaScript 前端开发
js如何传递参数
js如何传递参数
348 0
|
前端开发 JavaScript UED
什么是组件化设计
【10月更文挑战第22天】什么是组件化设计
|
Java Maven
使用javadoc生成maven项目的文档
本文介绍了如何在Maven项目中使用maven-javadoc-plugin插件来生成项目的JavaDoc文档,并展示了配置插件、编写代码、运行Maven命令以及查看生成文档的完整步骤。
611 0
使用javadoc生成maven项目的文档

热门文章

最新文章