[Groovy] 程式設計教學:使用運算子 (Operators)

【分享本文】
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

    在先前的文章中,我們介紹了變數 (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 的基本指令。

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【追蹤新文章】
    Facebook Twitter Plurk
    標籤: GROOVY, JAVA