運算子

在開始介紹運算子之前我們先來認識一個IntelliJ裡面一個實用的功能:

Kotlin REPL

REPL是read(讀取)、evaluate(求值)、print(輸出)、loop(迴圈)四個字的開頭。我們可以寫下一小段想測試的程式碼執行然後Kotlin REPL會依序執行上面的流程,讓我們可以在不影響專案的情況下測試一段程式碼。

那要怎麼開啟Kotlin REPL呢?

頂部選單 Tools -> Kotlin-> Kotlin REPL 就能開啟囉~接下來我們有關運算子的介紹就會使用 Kotlin REPL 來介紹

指定運算子(=)

在程式語言裡面指定運算子(=)並不是數學上的等號,所以這一行程式碼並不是一個無解的方程式

指定運算子其實就是把"右邊運算出來的結果",設定到"左邊的變數裡面",所以 x = x + 1,翻譯成白話文就是"把 x 變數裡的值加1之後,再設定回x變數裡"的意思。我們可以測試看看下面的程式碼看看會出現什麼樣的結果~

var x = 5
x = x + 1
print(x)

算術運算子(+, -, *, /, %)

  • +:加法運算

  • - :減法運算

  • *:乘法運算

  • /:除法運算

  • %:取餘數運算

我們來試試看下面會出現什麼結果吧~

val a = 10
val b = 3
print(a + b)
print("\n")
print(a - b)
print("\n")
print(a * b)
print("\n")
print(a / b)
print("\n")
print(a % b)

複合運算子(+=, -=, *=, /=, %=)

  • a += 1:等價於 a = a + 1

  • a -= 1:等價於 a = a - 1

  • a *= 1:等價於 a = a * 1

  • a /= 1:等價於 a = a / 1

  • a %= 1:等價於 a = a % 1

單元運算子(+, -, ++, — , !)

單元運算子顧名思義,他用來處理單個運算元,簡單來說單元運算子只有其中一邊有東西

  • +:正號運算子(一般來說都會省略)

  • -:負號運算子(負數變正數、正數變負數)

  • ++:遞增運算子

  •  — :遞減運算子

  • !:反向運算子(true變false、false變true)

這邊比較值得注意的地方是遞增(減)運算子有前綴跟後綴的差別,我們可以來比較一下他們的差異

var a = 1
print(a++)
print("\n")
print(a)

print("\n")

var b = 1
print(++b)
print("\n")
print(b)

執行後有沒有看出什麼差異呢?

關係運算子(===, !==, ==, !=, >, >=, <, <=)

  • ===:兩個實例是否為相同參照

  • !==:兩個實例是否為不同參照

  • ==:左右側的值是否相等

  • !=:左右側的值是否相異

  • >:左側是否大於右側

  • >=:左側是否大於等於右側

  • <:左側是否小右側

  • <=:左側是否小於等於右側

val a = 1
val b = 2
print(a == b)
print("\n")
print(a != b)
print("\n")
print(a > b)
print("\n")
print(a >= b)
print("\n")
print(a < b)
print("\n")
print(a <= b)

條件運算子(&&, ||)

  • &&:and運算

  • ||:or運算

&&
true
false

true

true

false

false

false

false

||
true
false

true

true

true

false

true

false

短路

&& 跟 || 有個很重要的特性,我們把它稱之為短路:在可以確認運算結果的時候會自動忽略後面全部的運算。

這是什麼意思呢?我們可以先在程式碼裡面加入下面兩個函數試試看

fun a(): Boolean {
    println("invoke a function-")
    return true
}

fun b(): Boolean {
    println("invoke b function-")
    return false
}

即便我們現在還沒有學過函數,但是我們依然可以用Kotlin PERL呼叫看看執行的時候會發生什麼事情。那接下來我們來試試看在Kotlin PERL分別執行下面的程式碼又會發生什麼事呢?

print(a() && b())
print("\n")
print(b() && a())
print("\n")
print(a() || b())
print("\n")
print(b() || a())

我們在這邊先簡單的認識過在Kotlin裡面比較常用的運算子了

BUT!對就是這個BUT!

運算子在Kotlin裡面的定義並不僅僅是現在這樣看到的這麼簡單而已,這個我們在之後學習到函數的時候會再介紹什麼是“operator function”,以及運算子怎麼跟operator function交互運作的

Last updated

Was this helpful?