【Kotlin 入門指南】系列文章目錄:https://bit.ly/3t8awwL
Kotlin 線上課程教學影片:https://bit.ly/3qJ5a5Q
在 Kotlin 程式語言中,你可以使用 var
或 val
關鍵字來聲明一個可觀察的屬性,並使用 by
關鍵字配合一個委託(delegate)對象。最常見的委託是 Delegates.observable()
方法,通過這個方法你可以監聽屬性的變化並執行相對應的程式碼。
在這個範例中,data
是一個可觀察屬性,當它的值被修改時,觀察器會被觸發,印出相應的訊息。這提供了一個方便且靈活的方法來管理屬性的變化,讓你可以進行必要的操作。
import kotlin.properties.Delegates
var data: String by Delegates.observable("初始值") { _, oldValue, newValue ->
println("oldValue:$oldValue -> newValue:$newValue")
}
fun main() {
data = "第一次修改"
data = "第二次修改"
}
輸出結果:
oldValue:初始值 -> newValue:第一次修改
oldValue:第一次修改 -> newValue:第二次修改
在 Kotlin 程式語言中,你可以使用 Delegates.vetoable()
方法來建立可否決值。這個方法需要兩個參數:屬性的初始值和一個設置新值時的條件檢查器(predicate),該檢查器會在新值即將被設置時被觸發。
在這個範例中,max
是一個可否決值的屬性。當新值被設置時,條件檢查器會被觸發,判斷是否否決這次的修改。如果條件檢查器返回 false
,新值將會被否決,屬性值保持不變;如果返回 true
,新值會被接受並更新屬性的值。
這種機制讓你能夠對屬性值的變化進行審核,根據特定條件決定是否允許值的修改,提供了更多控制屬性變化的彈性。
import kotlin.properties.Delegates
var max: Int by Delegates.vetoable(0) { _, oldValue, newValue ->
//新值需大於舊值才會被修改
newValue > oldValue
}
fun main() {
println(max) // 0
max = 100
println(max) // 10
max = 66
println(max) // 66
}
輸出結果
0
100
100//因為 66 小於舊值,所以被否決更改此資料值