语法
本章介绍了groovy编程语言的语法。该语言的语法源于Java语法,但用Groovy的特定构造增强它,并允许某些简化。
1.1.1. 注释
单行注释
单行注释开始于//,能使用在任何位置,字符跟在//后面,到行尾的这部分都被认为是注释的一部分
// a standalone single line comment
println "hello" // a comment till the end of the line
多行注释
一个多行注释开始于/*,能使用在任何位置,字符跟在/后面会被认为是注释的一部分,包括新的一行的字符,直到遇到/才认为注释已结束,因此多行注释才能放在语句后面或者语句中间。
/* a standalone multiline comment
spanning two lines */
println "hello" /* a multiline comment starting
at the end of a statement */
println 1 /* one */ + 2 /* two */
Groovydoc 注释
跟多行注释一样的是,Groovydoc 注释也是支持多行的,不同的是Groovydoc 注释开始于/**
,结束于*/,第一个groovydoc注释行后面的行可以选择以星号*开头。这些注释与以下内容相关:
- 类型定义(类、接口、枚举、注释)
- 字段和属性定义
- 方法定义
尽管编译器不会抱怨groovydoc注释没有与上述语言元素相关联,但是您应该在这些构造前面加上注释。
/**
* 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}"
}
}
Groovydoc遵循与Java自己的JavaDoc相同的约定。因此,您可以使用与JavaDoc相同的标签。
Shebang 行
除了单行注释之外,还有一个特殊的行注释,通常称为shebang行,Unix系统可以理解它,它允许脚本直接从命令行运行,前提是您已经安装了groovy发行版,并且路径上有groovy命令。
#!/usr/bin/env groovy
println "Hello from the shebang line"
#字符必须是文件的第一个字符。任何缩进都会产生编译错误。
1.1.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 |
while |
1.1.3. 标识符
普通标识符
标识符以字母、美元或下划线开头。它们不能以数字开头。
字母可以在以下范围内:
-
‘a’ to ‘z’ (lowercase ascii letter)
-
‘A’ to ‘Z’ (uppercase ascii letter)
-
‘\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
带引号的标识符
带引号的标识符出现在点式表达式的点后。例如,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"
正如我们将在下面关于字符串的小节中看到的,groovy提供了不同的字符串文本。在点后面实际上允许使用所有类型的字符串:
map.'single quote'
map."double quote"
map.'''triple single quote'''
map."""triple double quote"""
map./slashy string/
map.$/dollar slashy string/$
普通字符串和groovy的gstring(内插字符串)之间是不同的,在后一种情况下,内插值插入到最终字符串中来得到整个标识符:
def firstname = "Homer"
map."Simpson-${firstname}" = "Homer Simpson"
assert map.'Simpson-Homer' == "Homer Simpson"