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

PUBLISHED ON FEB 14, 2018 — PROGRAMMING

    運算子是資料可用的基本操作,如同程式的基本元件,用來組成更大的程式。本文介紹 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