Groovy基本句法
Gradle作为一个构建工具自然不会自己去创造一门语言来支撑自己,那么它用的是哪门子语言呢?什么语言能写成这样:
task hello {doLast {println 'Hello world!'} }
如此风骚的语法自然要归Groovy莫属了。
什么是Groovy
官方介绍如下:
Apache Groovy is a powerful, optionally typed and dynamic language, with static-typing and static compilation capabilities, for the Java platform aimed at improving developer productivity thanks to a concise, familiar and easy to learn syntax. It integrates smoothly with any Java program, and immediately delivers to your application powerful features, including scripting capabilities, Domain-Specific Language authoring, runtime and compile-time meta-programming and functional programming.
大概意思是Groovy是一门运行在java平台上的强大的、可选类型的、动态语言。使用Groovy可以使你的应用具备脚本,DSL定义,运行时和编译时元编程,函数式编程等功能。
接下来将分几个小节简单介绍Groovy的语法规范。
Groovy语法
注释
Groovy使用的注释有一下几种:
1.单行注释
// a standalone single line commentprintln "hello" // a comment till the end of the line
2.多行注释
/* a standalone multiline commentspanning two lines */println "hello" /* a multiline comment startingat the end of a statement */println 1 /* one */ + 2 /* two */
3.文档注释
/*** A Class description*/class Person {/** the name of the person */String name /*** Creates a greeting method for a certain person.** @param otherPerson the person to greet* @return a greeting message*/String greet(String otherPerson) { "Hello ${otherPerson}"} }
4.组织行
#!/usr/bin/env groovyprintln "Hello from the shebang line"
这类脚本注释主要用于表明脚本的路径。
字符串
单引号字符串
单引号字符串对应java中的String,不支持插入。
'a single quoted string'
字符串连接
assert 'ab' == 'a' + 'b'
三引号字符串
'''a triple single quoted string'''
三引号字符串同样对应java中的String,不支持动态插入。三引号字符串支持多行:
def aMultilineString = '''line one line two line three'''
转义
Groovy中使用\
来进行转义
'an escaped single quote: \' needs a backslash'
双引号字符串
"a double quoted string"
如果双引号字符串中没有插入表达式的话对应的是java中的String对象,如果有则对应Groovy中的GString对象。
Groovy中使用${}
来表示插入表达式,$
来表示引用表达:
def name = 'Guillaume' // a plain stringdef greeting = "Hello ${name}"assert greeting.toString() == 'Hello Guillaume'
def person = [name: 'Guillaume', age: 36]assert "$person.name is $person.age years old" == 'Guillaume is 36 years old'
shouldFail(MissingPropertyException) {println "$number.toString()"}
插入闭包表达式
def sParameterLessClosure = "1 + 2 == ${-> 3}" assert sParameterLessClosure == '1 + 2 == 3'def sOneParamClosure = "1 + 2 == ${ w -> w << 3}" assert sOneParamClosure == '1 + 2 == 3'
def number = 1 def eagerGString = "value == ${number}"def lazyGString = "value == ${ -> number }"assert eagerGString == "value == 1" assert lazyGString == "value == 1" number = 2 assert eagerGString == "value == 1" assert lazyGString == "value == 2"
关于闭包,暂时先看看就行,等后面具体学习完闭包以后再回来看这几个表达式就简单了。
三双引号字符串
def name = 'Groovy'def template = """Dear Mr ${name},You're the winner of the lottery!Yours sincerly,Dave """assert template.toString().contains('Groovy')
斜杠字符串
Groovy也可以使用/
来定义字符串,主要用于正则表达式
def fooPattern = /.*foo.*/assert fooPattern == '.*foo.*'
def escapeSlash = /The character \/ is a forward slash/assert escapeSlash == 'The character / is a forward slash'
def multilineSlashy = /onetwothree/assert multilineSlashy.contains('\n')
def color = 'blue'def interpolatedSlashy = /a ${color} car/assert interpolatedSlashy == 'a blue car'
/和//和/字符串
def name = "Guillaume"def date = "April, 1st"def dollarSlashy = $/Hello $name,today we're ${date}.$ dollar sign$$ escaped dollar sign\ backslash/ forward slash$/ escaped forward slash$/$ escaped dollar slashy string delimiter /$assert [ 'Guillaume', 'April, 1st', '$ dollar sign', '$ escaped dollar sign', '\\ backslash', '/ forward slash', '$/ escaped forward slash', '/$ escaped dollar slashy string delimiter'].each { dollarSlashy.contains(it) }
字符
单引号字符串如果只有一个字符会被转化成char
类型。
列表
Groovy中列表使用[]
表示,其中可以包含任意类型的元素:
def heterogeneous = [1, "a", true]
使用下标进行取值和赋值
def letters = ['a', 'b', 'c', 'd']assert letters[0] == 'a' assert letters[1] == 'b'assert letters[-1] == 'd' assert letters[-2] == 'c'letters[2] = 'C' assert letters[2] == 'C'letters << 'e' assert letters[ 4] == 'e'assert letters[-1] == 'e'assert letters[1, 3] == ['b', 'd'] assert letters[2..4] == ['C', 'd', 'e']
数组
Groovy中复用List来充当数组,但如果要明确定义真正的数组需要使用类似java的定义方法
String[] arrStr = ['Ananas', 'Banana', 'Kiwi'] assert arrStr instanceof String[] assert !(arrStr instanceof List)def numArr = [1, 2, 3] as int[] assert numArr instanceof int[] assert numArr.size() == 3
键值数组
Groovy中键值数组使用如下
def colors = [red: '#FF0000', green: '#00FF00', blue: '#0000FF'] assert colors['red'] == '#FF0000' assert colors.green == '#00FF00' colors['pink'] = '#FF00FF' colors.yellow = '#FFFF00' assert colors.pink == '#FF00FF'assert colors['yellow'] == '#FFFF00'assert colors instanceof java.util.LinkedHashMap
Groovy基本句法相关推荐
- Groovy中的闭包
groovy中的一个核心语法:closurs,也叫闭包.闭包在groovy中是一个处于代码上下文中的开放的,匿名代码块.它可以访问到其外部的变量或方法. 1. 句法 1.1 定义一个闭包 { [clo ...
- 平台多样化:Gavin Grover的Groovy之路
最近,Gavin Grover将其开发的Groovy-DLR 1.0的beta 04版源码上传到了codeflex站点,该版本对以前的版本作出了一些改进,包括就地(in-place)注释lex定义. ...
- Idea groovy表生成实体类带注释
Idea groovy表生成实体类带注释 1.点开datasourse,打开idea带的数据库工具,具体添加数据库连接,这里不描述. 这时点击会生成一个poji 这时生成的pojo中是不带中文注释的, ...
- groovy–流程控制
在本篇文章中,我们将介绍逻辑分支,循环,以及如何从if-else以及try-catch代码块中返回值. if – else Groovy 支持Java传统的if-else语法: def x = fal ...
- groovy–运算符重载
Groovy支持运算符重载,各种运算符被映射到普通的java对象的方法调用,这就使得开发者可以利用运算符重载的优势来编写自己的Java或者groovy对象. 下面的表格描述了groovy中的操作符所映 ...
- 便捷,轻巧的Groovy数据库操作
本文主要介绍Groovy对数据的CRUD操作,熟悉groovy.sql包,测试使用的数据库是H2. 1.数据库连接配置 //数据库连接配置 def db = [url:'jdbc:h2:mem:gro ...
- parsing:NLP之chart parser句法分析器
已迁移到我新博客,阅读体验更佳parsing:NLP之chart parser句法分析器 完整代码实现放在我的github上:click me 一.任务要求 实现一个基于简单英语语法的chart句法分 ...
- ElasticSearch Groovy脚本远程代码执行漏洞
什么是ElasticSearch? 它是一种分布式的.实时性的.由JAVA开发的搜索和分析引擎. 2014年,曾经被曝出过一个远程代码执行漏洞(CVE-2014-3120),漏洞出现在脚本查询模块,由 ...
- 参加海峡两岸城市地理信息系统论坛2010 年会(一张图、规划信息化和空间句法的碎碎念)...
上周末去清华建筑学院开了个会,叫做海峡两岸城市地理信息系统论坛2010 年会,主题很大,但是内容比较集中一些,就是围绕着GIS与城市规划.一天下来听了20个报告,挺佩服主办方的时间控制,这么密集的报告 ...
最新文章
- fixture详细介绍-作为参数传入,error和failed区别
- c 读取mysql 时间字段_MySQL中的时间字段的几种数据类型比较
- 列模式 文本编辑器_UltraEdit 24.2 文本编辑器免费版
- db2 sql执行历史_5 个免费的在线 SQL 数据库环境,比Navicat 香!
- ZOJ-3704 I am Nexus Master! 模拟
- 服务器无限火力时间,LOL十周年宣布无限火力开启时间 无限火力开启及持续时间详情...
- Oracle 归档模式
- TCP新手误区–粘包的处理
- LINUX编译opencore-amr
- 不小心中了makop勒索病毒
- 【IntelliJ IDEA】设置字体大小
- dataframe动态命名(读取不同文件并规律命名)
- Redhat_rhel8.0_DNS服务搭建步骤
- passwd_pro
- CAD如何调整线形比例?
- python回归取残差_R/python-回归分析
- 到底什么是JWT技术?
- 用DOS命令关闭端口
- swiftui视频_swiftui视频播放器实时处理核心图像
- Android关于虚拟控件、全面屏及悬浮球机型适配时遇到的问题