前言
在程式設計中,運算子多用符號而非文字來標記。由於運算子無法切分為更小的單位,可以視為程式語言最小的單位。本文介紹 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 ANDor:bitwise ORxor:bitwise XORshl:左移 (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 的邏輯運算子如下:
andornot
以下是實例:
# 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 官方之後能改善。