plus
***運算符// 定義
data class Point(val x: Int, val y: Int) {
// 定義一個名爲「plus」的方法
operator fun plus(other: Point): Point {
// 座標分別相加,而後返回一個新的點
return Point(x + other.x, y + other.y)
}
}
// 測試
>>> val p1 = Point(10, 20)
>>> val p2 = Point(30, 40)
>>> Point(p1 + p2)
Point(x=40, y=60)
複製代碼
關鍵字***operator
***:用於重載運算符的全部函數都須要用該關鍵字標記,用來表示將該函數做爲相對的約定的實現。算法
可重載的二元算術運算符markdown
表達式 | 函數名 |
---|---|
a * b | times |
a / b | div |
a + b | plus |
a - b | minus |
自定義類型的運算符,基本上和與標準數字類型的運算符有着相同的優先級。函數
注意:Kotlin運算符不會自動支持交換性(交換運算符的左右兩邊)。測試
複合賦值運算符:+=、-=
ui
>>> var point = Point(1, 2)
>>> point += Point(3, 4)
>>> println(point)
Point(x=4, y=6)
複製代碼
上述等效於 **point = point + Point(3, 4)
**的寫法。this
+=
運算能夠修改使用它的變量所引用的對象,但不會從新分配引用**。Kotlin標準庫支持集合的這兩種方法:「+」和「-」運算符老是返回一個新的集合。「+=」和「-=」運算符用於可變集合時,始終就地修改它們;而它們用於只讀集合時,會返回一個修改過的副本(這意味着只有當引用只讀集合的變量被聲明爲**var
**的時候,才能使用「+=」和「-=」)spa
重載一元運算符的過程和以前的方法相同:用預先定義的一個名稱來聲明函數(成員函數或擴展函數),並用修飾符**operator
**標記。code
// 一元運算符無參數
operator fun Point.unaryMinus(): Point {
// 座標取反再返回
return Point(-x, -y)
}
>>> val p = Point(10, 20)
>>> println(-p)
Point(x=-10, y=-20)
複製代碼
可重載的一元算法的運算符orm
表達式 | 函數名 |
---|---|
+a | unaryPlus |
-a | unaryMinus |
!a | not |
++a, a++ | inc |
--a, a-- | dec |
operator fun BigDecimal.inc() = this + BigDecimal.ONE
// 在第一個println語句執行後增長
>>> var bd = BigDecimal.ZERO
>>> println(bd++)
0
// 在第二個println語句執行前增長
>>> println(++bd)
2
複製代碼