本章节会讲解Groovy编程语言的一些基础语法,虽然Groovy是对Java的增强,但也加强了一些语法结构并做了简化了。
1、注释
1.1、单行注释
单行注释是两个斜杠 // 开头表示的,可以在一行的任意位置,一直到行尾,都是注释的一部分。
// 一个独立的单行注释 println "hello" // 代码后面的单行注释
1.2、多行注释
多行注释是用 /*
开头的,可以在一行的任意位置。/* 后面的内容都是注释的一部分,一直到遇见结束字符 */
整个多行注释才算结束,多行注释可以写在一行,也可以在多行进行书写,也可以写在代码内容里进行注释。
/* a standalone multiline comment spanning two lines */ println "hello" /* a multiline comment starting at the end of a statement */ println 1 /* one */ + 2 /* two */
1.3、Groovy文档注释
类似于多行注释,Groovy文档注释也是多行的,但是是以字符 /** 起始, */ 字符结束的,每一个新行的注释的开始位置都可以选择加上星号 * ,这些注释可表示:
类型定义(类、接口、枚举、注解)
字段和属性定义
方法定义
虽然解析器不会解释这些文档注释,但为了阅读方便,还是要正确的添加文档注释。
/** * 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}" } }
Groovy文档遵循了Java文档的规则,所以你可以使用Java文档注释的规则,另外Groovy从3.0.0后支持了运行时的Groovy文档注释,也就是说Groovy在运行的时候,注释会被保留下来方便调试。
运行时文档默认是关闭的,如果你想启用,需要在JVM选项中添加
-Dgroovy.attach.runtime.groovydoc=true
运行时Groovy文档起始字符是 /**@ ,结束字符为 */,例如:
/**@ * Some class groovydoc for Foo */ class Foo { /**@ * Some method groovydoc for bar */ void bar() { } } assert Foo.class.groovydoc.content.contains('Some class groovydoc for Foo') assert Foo.class.getMethod('bar', new Class[0]).groovydoc.content.contains('Some method groovydoc for bar')
1.4. 解释伴随行
Beside the single-line comment, there is a special line comment, often called the shebang line understood by UNIX systems which allows scripts to be run directly from the command-line, provided you have installed the Groovy distribution and the groovy
command is available on the PATH
.
除了单行注释以外,还有一个特殊的行注释,经常被叫做解释伴随行(shebang line),是为了让UNIX系统知道哪一种类型的脚本要在命令行中运行。而我们要使用Groovy命令行来执行脚本,就需要确保PATH环境变量中,配置了groovy的执行路径。
#!/usr/bin/env groovy println "Hello from the shebang line"
2、关键字
Groovy语法中的关键字如下
as | assert | break | case |
catch | class | const | continue |
def | default | do | else |
enum | extends | false | finally |
for | goto | if | implements |
import | in | instanceof | interface |
new | null | package | return |
super | switch | this | throw |
throws | trait | true | try |
var | while |
3 标识符
3.1 普通标识符
标识符以字母,美元符或下划线开头。不能以数字开头
字母可以是以下的范围:
a to z (小写 ascii 字母)
A to Z (大写 ascii 字母)
\u00C0 to \u00D6
\u00D8 to \u00F6
\u00F8 to \u00FF
\u0100 to \uFFFE
首字母之后的字符可以包含字母与数字。
这里有一些合法的表示符的例子(这是合法的名字):
def name def item3 def with_underscore def $dollarStart
但以下的是不合法的标识符:
def 3tier def a+b def a#b
所有的跟着点号后关键字也是合法的标识符:
foo.as foo.assert foo.break foo.case foo.catch
3.2 带引号的标识符
带引号标识符出现在点号表达式的点号之后。 例如,person.name表达式中name部分就可以引号引起来成为person."name"或person.'name' 有趣的是,当某些标识符包含由Java语言规范中禁止的非法字符,引号引起来后在Groovy就会被容许。 例如,像一个破折号,空格,感叹号等字符。
def map = [:] map."an identifier with a space and double quotes" = "ALLOWED" map.'with-dash-signs-and-single-quotes' = "ALLOWED" assert map."an identifier with a space and double quotes" == "ALLOWED" assert map.'with-dash-signs-and-single-quotes' == "ALLOWED"
正如我们将会在strings一节看到的那样,Groovy提供不同的字符串文字。 所有跟着点号的字符串都是被允许的:
map.'single quote' map."double quote" map.'''triple single quote''' map."""triple double quote""" map./slashy string/ map.$/dollar slashy string/$
正如下面的例子,纯字符的字符串和Groovy的GStings(字符串插值)的区别是,计算整个标识符时,插入的字符值是被插入到最终字符串:
def firstname = "Homer" map."Simpson-${firstname}" = "Homer Simpson" assert map.'Simpson-Homer' == "Homer Simpson"