Groovy 注释、关键字、标识符

本章节会讲解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语法中的关键字如下

Table 1. Keywords

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"