【在主画面加入捷径】
       
【选择语系】
繁中 简中

[Groovy] 程序设计教学:使用运算符 (Operators)

【赞助商连结】

    在先前的文章中,我们介绍了变量 (variable) 和数据类型 (data type)。但是,我们要操作数据,就需要一些基本的指令,透过运算符 (operator),程序设计者可以对数据进行一些基本的操作。

    Groovy 的运算符种类较多,但有些运算符需要搭配相关的概念才容易了解。在本文中,我们先介绍一些基本的运算符:

    • 代数运算符 (arithmetic operator)
    • 二元运算符 (bitwise operator)
    • 关系运算符 (relational operator)
    • 逻辑运算符 (logical operator)
    • 三元运算符 (ternary operator) 和 Elvis 运算符

    代数运算符 (Arithmetic Operator)

    以下是 Groovy 的代数运算符:

    • +
    • -
    • *
    • /
    • 取余数 %
    • 取指数 **
    • 取正号 +
    • 取负号 -

    代数运算符的使用方式和基础代数运算相同。见以下实例:

    assert 3 + 2 == 5
    assert 3 - 2 == 1
    assert 3 * 2 == 6
    assert 3 / 2 == 1.5
    assert 3 % 2 == 1
    assert 3 ** 2 == 9

    要注意的是,整数相除若除不尽会得到小数,这和日常生活中的计算方式相同,但和某些程序语言的特性不同。另外,除以零会引发程序错误 (error)。

    二元运算符 (Bitwise Operator)

    二元运算符是用来操作二进位数 (binary number) 的符号。Groovy 提供以下四种二元运算符符号:

    • bitwise AND &
    • bitwise OR |
    • bitwise XOR ^
    • bitwise NOT ~

    以下例子用二元运算符做为旗标 (flag):

    final EXEC = 1
    final WRITE = 2
    final READ = 4
    
    assert READ == 4
    assert (READ ^ WRITE) == 6
    assert (READ ^ EXEC) == 5

    二元运算符一般是用在低阶程序,平常较少用到;理论上,使用二元运算会比一般的代数运算快或省资源,但笔者目前无法确认在 Groovy 中是否也是如此。Groovy 不是系统程序语言,保留这项特性仅是保有少数旧有的习惯。

    关系运算符 (Relational Operator)

    关系运算符用来比较值之间的大小,Groovy 的关系比较运算符会回传布尔值,主要是用在条件句 (conditional) 中,我们将于后文介绍条件判断。以下是 Groovy 的关系运算符:

    • 相等 ==
    • 不等 !=
    • 小于 <
    • 小于或等于 <=
    • 大于 >
    • 大于或等于 >=

    实例如下:

    assert 3 == 3
    assert 3 != 4
    assert 3 < 4
    assert 3 <= 4
    assert 5 > 4
    assert 5 >= 4

    逻辑运算符 (Logical Operator)

    逻辑运算符是用来将两个或两个以上的逻辑条件结合,以达成复合的效果。一般程序设计书籍会提供真值表 (true value table),但其实不需要记忆那个表格,只要记得:

    • AND (&&):两者皆为真才为真
    • OR (||):其中之一为真即为真
    • NOT (!):真变伪,伪变真

    以下是实例:

    // Logical AND
    assert (true && true) == true
    assert (true && false) == false
    assert (false && true) == false
    assert (false && false) == false
    
    // Logical OR
    assert (true || true) == true
    assert (true || false) == true
    assert (false || true) == true
    assert (false || false) == false
    
    // Logical NOT
    assert !true == false
    assert !false == true

    三元运算符 (Ternary Operator)

    三元运算符是精简版的条件叙述,代替 if { ... } else { ... } 叙述以取值。实例如下:

    def a = 3; def b = 2
    def max = a > b ? a : b
    
    assert max == 3

    以上的程序在 a 和 b 中取较大的值,若 a 大于 b 则取 a,反之则取 b。

    Elvis 运算符

    Elvis 运算符是三元运算符的变体,可撰写较简洁的程序代码。以下是一个使用三元运算符的实例:

    def data = null
    def var = data != null ? data : "Hello"
    
    assert var == "Hello"

    重新以 Elvis 运算符改写如下:

    def data = null
    def var = data ?: "Hello"
    
    assert var == "Hello"

    Groovy 还有一些其他的运算符,但这些运算符会牵涉到其他的概念,故不在本文中说明。经过本文的介绍,读者学到一些 Groovy 的运算符,也可视为 Groovy 的基本指令。

    【赞助商连结】
    TAGS: GROOVY, JAVA