[Nim] 程式設計教學:運算子 (Operator)

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

    前言

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

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