bells
安裝本網站至主畫面:

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

PUBLISHED ON OCT 1, 2017 — PROGRAMMING
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

    Perl 6 的運算子較多,本文僅列出常見的運算子。

    運算子的種類

    根據運算子的位置,分為以下五種:

    • Prefix,例:-3
    • Infix,例:3 + 2
    • Postfix,例:$a++
    • Circumfix,例:<foo bar baz> (字串串列)
    • Postcircumfix,例:@arr[0] (陣列取索引)

    平常不需死記這些分類,但這個概念對於實作運算子重載 (operator overloading) 會有幫助,我們將於後文說明。

    代數運算子

    • +:相加
    • -:相減
    • *:相乘
    • /:相除
    • div:整數相除
    • %:取餘數,可用於有理數
    • mod:整數取餘數
    • **:指數
    • gcd:取最大公約數
    • lcm:最最小公倍數

    以下為實例:

    遞增遞減運算子

    • ++:遞增 1
    • --:遞減 1

    遞增/減放在變數前後的效果略有不同,但刻意操作這種效果不是好習慣,建議將這類運算子分開獨立的一行撰寫。

    二元運算子

    • +&:bitwise AND
    • +|:bitwise OR
    • +^:bitwise XOR
    • +<:左移
    • +>:右移

    以下是實例:

    比較運算子

    要注意的是,Perl 6 有兩套比較運算子,分別用於數字和字串。

    • 比較數字
      • ==:相等
      • !=:不相等
      • >:大於
      • >=:大於等於
      • <:小於
      • <=:小於等於
    • 比較字串
      • eq:相等
      • ne:不相等
      • gt:大於
      • ge:大於等於
      • lt:小於
      • le:小於等於

    以下是實例:

    除了以上比較運算子,還有以下幾種相等運算子:

    • ~~:智能相等運算子,會根據兩邊的值自動比對是否相等
    • eqv:相等運算子,檢查兩邊的值型別相等且值相等
    • ===:物件相等運算子,對基本型別,同於 eqv,對物件來說,要相同物件才會相等
    • =~=:浮點數相等運算子,當浮點數誤差夠小時相等,預設誤差值為 10 的 -15 次方

    另外還有數種三元運算子:

    • cmp:智能三元運算子,會根據兩邊的值自動比對
    • <=>:數字三元運算子,會將兩邊的值轉為 Real 型別
    • leg:字串三元運算子,會將兩邊的值轉為字串後比較 (註:leg 是 less、equal、greater 的縮寫)

    另外還提供比較順序的運算子,可用於多種型別:

    • before
    • after

    邏輯運算子

    要注意的是,Perl 6 有兩套邏輯運算子,兩者優先度有所不同。

    • 低優先度
      • and:且
      • or:或
      • not:否定
    • 高優先度
      • &&:且
      • ||:或
      • !:否定

    以下是實例:

    布林轉換運算子

    布林轉換運算子會將值轉為布林值,可用於條件判斷中。

    • 前綴的 ?:較高優先度
    • 前綴的 so:較低優先度

    使用本運算子的要點在於知道那些值為 falsey,即會判定為 False 的值,例子如下:

    • 未定義的變數
    • Nil
    • 0 (整數零)
    • 0.0 (有理數零)
    • "" (空字串)
    • () (空串列)
    • {} (空雜湊)

    其他的值則為 truthy,即會判定為 True 的值。

    字串運算子

    • x:字串重覆
    • 二元 ~:字串相接
    • 前綴 ~:將值轉為字串

    以下是實例:

    範圍運算子

    • ..:含頭尾
    • ..^:含頭不含尾
    • ^..:不含頭含尾
    • ^..^:不含頭不含尾

    見以下實例:

    運算子優先順序

    Perl 6 的運算子優先順序很複雜,但不需強記,因為

    • 數學相關的運算子其優先順序和數學中相同
    • 用括號可改變優先順序

    運算子重載

    Perl 6 支援運算子重載 (operator overloading),除了內建型別外,我們也可以為自訂型別自訂相關的運算子操作,這些自訂型別就可以如同內建型別般操作,例如:向量 (vector) 或矩陣 (matrix) 型別。我們將於物件導向程式中介紹運算子重載。

    你或許對以下產品有興趣
    Xmas tree