【Kotlin 入門指南】可觀察屬性 (Observable properties)

閱讀時間約 3 分鐘
【Kotlin 入門指南】系列文章目錄:https://bit.ly/3t8awwL
Kotlin 線上課程教學影片:https://bit.ly/3qJ5a5Q

可觀察屬性

在 Kotlin 程式語言中,你可以使用 varval 關鍵字來聲明一個可觀察的屬性,並使用 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 小於舊值,所以被否決更改此資料值


8會員
220內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...