更新於 2024/12/07閱讀時間約 5 分鐘

【Kotlin 入門指南】kotlin 區域函數 (Scope functions) - run

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

run

run 函數在 Kotlin 程式語言中具有讓人驚豔的多功能性,可以被視為 let 函數和 with 函數的完美結合。為什麼這麼說呢?因為 run 函數不僅能夠像 let 函數一樣優雅地處理物件是否為 null 的情況,同時也像 with 函數一樣提供了對同一個對象進行多次屬性設定的便捷方式。這種集合了兩者優點的特性,使得 run 函數在 Kotlin 中成為一個相當強大且實用的工具。

run 區域函數基本用法

run 區域函數,讓你在特定的作用域內直接呼叫該物件的成員函數或屬性,而無需重複使用該物件名稱。在這次範例中,我們使用 run 函數直接呼叫 dataIsLong 函數,判斷字串長度是否超過五個字元,這樣做不僅簡化了程式碼,也增加了可讀性。

fun dataIsLong(data: String) = data.length > 5

fun main() {
//使用前
dataIsLong("1") //false
dataIsLong("123456789") //true

//使用後
"1".run(::dataIsLong) //false
"123456789".run(::dataIsLong) //true
}

run 區域函數,連續呼叫使用範例

在這個範例中,我們連續使用 run 函數,將字串長度檢查的結果直接傳遞給 getResult 函數並印出結果。這種風格不僅提高了程式碼的簡潔度,還使得程式邏輯更易於理解。

fun dataIsLong(data: String) = data.length > 5

fun getResult(isTooLong: Boolean): String {
return if (isTooLong) {
"資料錯誤"
} else {
"資料正確"
}
}

fun main() {
// 傳統連續呼叫方式
println(getResult(dataIsLong("123456")))


//使用 run ,連續呼叫範例
"123456"
.run(::dataIsLong)
.run(::getResult)
.run(::println)
}

run 區域函數功能表

run 區域函數功能表

run 區域函數,在 Android 應用實戰範例

run 函數在 Android 應用中有極佳的適用性。舉例來說,假設我們有一個 TextView 物件,以往設置其屬性時常常需要使用 ?. 來避免空指針錯誤,透過run 函數,這樣的寫法不僅更為清晰,也減少了重複調用 textView 物件的情況,使得程式碼更加簡潔易讀。

val textView : TextView = findViewById(R.id.textView)

//未使用 run 區域函數,每次使用都要「?.」判斷是否為 null
textView?.text = "HKT線上教室"
textView?.setTextColor(Color.parseColor("#ffd700"))
textView?.textSize = 66f

//使用 run 區域函數
textView.run {
text = "HKT線上教室"
setTextColor(Color.parseColor("#ffd700"))
textSize = 66f
}
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.