2.1.2 基本语法

1. 注释

与大部分语言相同,Groovy中行注释使用//符号,块注释使用/*······*/。

在groovydoc的注释方式中,可以对类、成员变量、方法进行注释,该注释以/**开头,以*/结尾,每行以*开头,形式如代码2.5所示。

/**
* 类的注释
*/
class Person {
    /** 人员姓名(属性注释)*/
    String name
    /**
    * 方法注释,包括方法参数和返回值
    *
    * @param otherPerson the person to greet
    * @return a greeting message
    */
    String greet(String otherPerson) {
        "Hello ${otherPerson}"
    }
}

代码2.5 groovydoc注释方式示例

2. 关键字

Groovy中关键字列举如表2.1所示。

表2.1 Groovy中关键字列举

3. 标识符

在Groovy中可以使用部分Unicode码、英文字符、数字,以及-、等符号组成的字符串作为标识符,但是首个字符不能是数字和特殊字符。

4. 变量声明

Groovy是一种弱类型语言,对于基础类型,无须处理转化问题,声明时也可不指明变量类型,使用关键字def声明变量,如代码2.6所示。

def firstName = '三' // 不指明变量类型
String lastName = '张' // 指明变量类型
def personList = ['张三', '李四', '王五'] // 定义并赋值
def personMap = ['张三': 5, '李四': 6]
def emptyList = [] // 声明空List
def emptyMap = [:] // 声明空Map
def age = 10
def amount = 10.56

代码2.6 Groovy变量声明

5. 控制结构:条件

Groovy语法中使用if...else...作为条件控制语句,与Java相同。同时,Groovy提供的switch语句的匹配功能也更加强大,可以支持列表、范围以及正则表达式,各种使用方式可以参考代码2.7,读者可以修改x的值,测试匹配结果。

def x = "foo"
def result = ""
switch (x) {
    case "foo": // 匹配字符串
         result = "found foo"
         break
    case [4, 5, 6, 'inList']: // 匹配数组元素
         result = "list"
         break
    case 12..30: // 匹配范围
         result = "range"
         break
    case Integer : // 匹配对象类型
         result = " integer"
         break
    case ~/fo*/: // 将对象转为字符串并使用正则表达式
         result = "foo regex"
         break
    case { it < 0 }: // 使用it
         result = " negative"
         break
    default : // 默认值
         result = " default"
}
println(result)

代码2.7 Groovy控制结构:条件

6. 控制结构:循环

Groovy拥有标准的while、for、for-in、break以及continue的支持。值得一提的是,它更精简便捷的for-in语法,可以针对数组、范围、映射等对象进行迭代,如代码2.8所示。

def val = 'hello'
for(i in 0..5) { // 可以试试替换为0..<5
    println val
}
def array = (0..4).toArray()
def x = 0
for ( i in array ) {
    x += i
}
def map = ['abc':1, 'def':2, 'xyz':3]
x = 0
for ( e in map ) {
    x += e.value
}
assert x == 6

代码2.8 Groovy控制结构:循环

7.异常捕获

Groovy的异常捕获和Java相同,可以使用try-catch-finally、try-catch、try-finally来定义需要异常捕获的代码块,异常捕获的示例如代码2.9所示。

try {
    'text'.toLong()
    // ……其他业务逻辑
} catch ( e ) {
    // 捕获异常
    println(e.message)
} finally {
    // 不论是否抛出异常,都会执行
    // ……
}

代码2.9 Groovy异常捕获