Nim 程式設計教學:運算子

運算子是資料可用的基本操作,如同程式的基本元件,用來組成更大的程式。本文介紹 Nim 常用的運算子。

註:Nim 官方文件對於運算子的說明相對簡略,本文由筆者自行整理而成。

代數運算子

代數運算子用於基本的四則運算,包括加減乘除等,在 Nim 中可用的運算子如下:

  • +:相加
  • -:相減
  • *:相乘
  • /:相除,未整除會得到浮點數
  • div:整數相除
  • mod:取餘數

以下為實例:

assert(2 + 3 == 5)
assert(2 - 3 == -1)
assert(2 * 3 == 6)
assert(abs(2 / 3 - 0.666666) < 1.0 / 1000000)
assert(2 div 3 == 0)
assert(2 mod 3 == 2)

二元運算子

二元運算子用於二進數數的運算,Nim 的二元運算子如下:

  • and:bitwise AND
  • or:bitwise OR
  • xor:bitwise XOR
  • shl:左移 (left shift)
  • shr:右移 (right shift)

以下是實例:

# 0001 and 0100
assert((1 and 4) == 0)

# 0001 or 0011
assert((1 or 3) == 3)

# 0001 xor 0100
assert((1 xor 4) == 5)

# 0001 --> 0100
assert((1 shl 2) == 4) 

# 0011 --> 0001
assert((3 shr 1) == 1)

要注意的是,Nim 的二元運算子及邏輯運算子共用相同的符號,其優先順序較低,在進行二元運算時需用括號提高其優先順序。筆者以為,這樣的設計某種程度上來說是 Nim 的設計缺失。

字串相關運算子

以下是字串相關的運算子:

  • &:字串相接
  • $:將變數以字串表示

以下是實例:

assert("Hello " & "World" == "Hello World")

比較運算子

比較運算子用來比較資料的大小,Nim 的比較運算子可以用來比較多重資料類型,如下:

  • ==:相等
  • !=:不相等
  • >:大於
  • >=:大於等於
  • <:小於
  • <=:小於等於

以下實例比較數字:

assert(3 + 2 == 5)
assert(3 + 2 != 4)

assert(3 > 2)
assert(3 >= 2)

assert(3 < 5)
assert(3 <= 5)

也可用來比較字串:

assert("Perl" == "Perl")
assert("Perl" != "Ruby")

assert("Perl" > "Groovy")
assert("Perl" >= "Groovy")

assert("Perl" < "Ruby")
assert("Perl" <= "Ruby")

邏輯運算子

邏輯運算子用來進行布林運算,Nim 的邏輯運算子如下:

  • and
  • or
  • not

以下是實例:

# AND
assert((true and true) == true)
assert((true and false) == false)
assert((false and true) == false)
assert((false and false) == false)

# OR
assert((true or true) == true)
assert((true or false) == true)
assert((false or true) == true)
assert((false or false) == false)

# NOT
assert((not true) == false)
assert((not false) == true)

指派運算子

指派運算子算是一種語法糖,例如:n = n + 1 可改寫為 n += 1

以下列出一些 Nim 的指派運算子:

  • =
  • +=
  • -=
  • *=
  • /=:僅能用於浮點數

有些運算子無法用指派運算子,但 Nim 的官方手冊未明確指出那些情境可用此種語法糖,希望 Nim 官方之後能改善。

comments powered by Disqus