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

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

在先前的文章中,我們介紹了變數和資料型別。但是,我們要操作資料,就需要一些基本的指令,透過運算子 (operator),程式設計者可以對資料進行一些基本的操作。

Groovy 的運算子種類較多,但有些運算子需要搭配相關的概念才容易了解。在本文中,我們先介紹一些基本的運算子。

代數運算子 (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)。

如果要用整數除法,可用整數的 intdiv 函式。參考以下範例:

assert 50.intdiv(15) == 3

這裡也用到前文所提的物件導向語法。

二元運算子 (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 的基本指令。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。