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