運算子
在開始介紹運算子之前我們先來認識一個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
true
false
false
false
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?