【Kotlin 入門指南】系列文章目錄:https://bit.ly/3t8awwL
Kotlin 線上課程教學影片:https://bit.ly/3qJ5a5Q
run 函數在 Kotlin 程式語言中具有讓人驚豔的多功能性,可以被視為 let 函數和 with 函數的完美結合。為什麼這麼說呢?因為 run 函數不僅能夠像 let 函數一樣優雅地處理物件是否為 null 的情況,同時也像 with 函數一樣提供了對同一個對象進行多次屬性設定的便捷方式。這種集合了兩者優點的特性,使得 run 函數在 Kotlin 中成為一個相當強大且實用的工具。
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
函數,將字串長度檢查的結果直接傳遞給 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
函數在 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
}