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

更新於 2024/12/07閱讀時間約 5 分鐘
【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 區域函數功能表

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
}
avatar-img
11會員
243內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
HKT實驗室 的其他內容
當我們需要對特定物件進行多個操作時,傳統的做法是每次都要重複寫下該物件的名稱,這不僅冗長,還可能降低程式碼的可讀性。而 with 函數則能夠解決這個問題,它的作用是將指定物件傳遞給 lambda 函數,在該函數內可以直接訪問該物件的屬性和方法。
在 Kotlin 程式語言中,當你使用 apply 函數時,你可以將其視為對該物件進行屬性設定的操作。 apply 函數讓你能夠直接在物件上執行多個設定操作,並返回該物件本身,讓程式碼更為簡潔而具有可讀性。這個函數特別適合在建立物件後立即對其屬性進行初始化或設定的情境下使用。
在 Kotlin 裡,also 函式能夠在物件上執行一連串操作,同時回傳該物件本身。儘管 also 與 let 函式有相似之處,但兩者仍有些許差異。主要區別在於它們的回傳值:also 函式會回傳物件本身,而 let 函式則回傳 Lambda 運算後的結果。這個差別影響了它們在程式碼中的適用情境。
Kotlin 標準函式庫中有五個函數,它們的目的是在一個物件的範圍內執行一段程式碼。這些函數分別是 let, run, with, apply, 和 also。它們的差別在於物件在程式碼中的可用方式和整個表達式的回傳值。
takeIf 與 takeUnless 函數在 Kotlin 程式語言中,提供了一種更具彈性和簡潔的方式來處理條件性邏輯。它們讓程式碼更易讀、更容易維護,同時減少了不必要的重複代碼。藉由善用這兩個函數,你能夠提升自己的程式撰寫效率,寫出更具可讀性且高效的 Kotlin 程式碼。
當需要使用某個父類別的功能,但不想自行實作時,Kotlin 程式語言中,提供了一種原生的語法支持,讓我們可以很容易地使用委托類別。我們只需要在類別的宣告中使用 by 關鍵字,就可以指定一個委托對象,然後編譯器會自動幫我們生成所有需要委托的方法和屬性。
當我們需要對特定物件進行多個操作時,傳統的做法是每次都要重複寫下該物件的名稱,這不僅冗長,還可能降低程式碼的可讀性。而 with 函數則能夠解決這個問題,它的作用是將指定物件傳遞給 lambda 函數,在該函數內可以直接訪問該物件的屬性和方法。
在 Kotlin 程式語言中,當你使用 apply 函數時,你可以將其視為對該物件進行屬性設定的操作。 apply 函數讓你能夠直接在物件上執行多個設定操作,並返回該物件本身,讓程式碼更為簡潔而具有可讀性。這個函數特別適合在建立物件後立即對其屬性進行初始化或設定的情境下使用。
在 Kotlin 裡,also 函式能夠在物件上執行一連串操作,同時回傳該物件本身。儘管 also 與 let 函式有相似之處,但兩者仍有些許差異。主要區別在於它們的回傳值:also 函式會回傳物件本身,而 let 函式則回傳 Lambda 運算後的結果。這個差別影響了它們在程式碼中的適用情境。
Kotlin 標準函式庫中有五個函數,它們的目的是在一個物件的範圍內執行一段程式碼。這些函數分別是 let, run, with, apply, 和 also。它們的差別在於物件在程式碼中的可用方式和整個表達式的回傳值。
takeIf 與 takeUnless 函數在 Kotlin 程式語言中,提供了一種更具彈性和簡潔的方式來處理條件性邏輯。它們讓程式碼更易讀、更容易維護,同時減少了不必要的重複代碼。藉由善用這兩個函數,你能夠提升自己的程式撰寫效率,寫出更具可讀性且高效的 Kotlin 程式碼。
當需要使用某個父類別的功能,但不想自行實作時,Kotlin 程式語言中,提供了一種原生的語法支持,讓我們可以很容易地使用委托類別。我們只需要在類別的宣告中使用 by 關鍵字,就可以指定一個委托對象,然後編譯器會自動幫我們生成所有需要委托的方法和屬性。
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
本章節旨在教導讀者如何在 Kotlin 中引入套件。將會涵蓋如何引用第三方套件,如何引用自定義模組,以及如何創建和引用自定義套件。此外,還會列出一些常用的套件,以供讀者參考。
Thumbnail
Companion Object 是 Kotlin 中一個特殊的物件,用來在類別內部創建靜態成員。當你在一個類別內部建立 companion object 時,裡面的成員就可以像 Java 中的靜態成員一樣被使用,不需要通過該類別的實例來訪問。 結合使用 @JvmStatic 和 Companion
Thumbnail
當你在 Kotlin 中使用 val 或 var 定義一個屬性時,在 Java 中預設會轉換為 getter 和 setter 方法。如果你希望直接在 Java 中存取這個屬性,可以使用 @JvmField 註解。這會讓 Kotlin 編譯器將屬性生成為公開的,而非生成 getter 和 sette
Thumbnail
let 區域函數是 Kotlin 中一個非常實用的工具,特別適用於處理可空對象。它讓程式碼更加簡潔、安全,同時提高了可讀性。透過 let 區域函數,我們可以更優雅地處理可空性問題,使得程式開發更加高效順暢。
Thumbnail
在 Kotlin 程式語言中,當你使用 apply 函數時,你可以將其視為對該物件進行屬性設定的操作。 apply 函數讓你能夠直接在物件上執行多個設定操作,並返回該物件本身,讓程式碼更為簡潔而具有可讀性。這個函數特別適合在建立物件後立即對其屬性進行初始化或設定的情境下使用。
Thumbnail
行程 (Process),正如其名,指的是正在執行的程式 (Program),變數在其之中,是獲得命名,能保留自我的少數特殊存在。如果變數屬於全域變數 (Global Value),那麼其生命週期就會和行程一致,其他較短生命週期的都是局部變數 (Local Value)。 從一而終,在生命中止前不變
Thumbnail
接續上次的士兵類別,提到名字用了 String 變數。 String 是字串的意思,在 Kotlin 裡,常見變數可以分成幾個基本資料型別:數字(Number)、字串(String)、布林(Boolean)。 差別在於行為模式不同,以加法為例,數字執行數學課上的四則運算的加法,字串卻做了連接,布林則
Thumbnail
作為指揮官,如果只有一個部下也太令人傷心了。 為能夠有效率的取得大量的士兵,使用類型(Type)來廉價批發。 建立一個檔案「士兵.kt」,這次選 class,讓 IDE 幫我們初始化類別的程式碼 。 建立一個檔案「士兵.kt」,選 class 。  IDE 預設將 class 取名和檔案一樣。 初級
程式是個單純的小伙子,他會按照程式碼的內容執行動作,所以我們可以把函數當作給他的指令「單位」,不是最小單位,就只是單位。 以下是令人熱血沸騰的情境: 「射擊準備!發射角度東偏南33度,目標距離200公尺,風向正西速度每小時100公里,氣溫38度,濕度百分之20。」 「yes, my master.」
Thumbnail
現在,開始建立第一個檔案吧,一樣用最簡單的 Hello World 示範。 在 kotlin 資料夾按右鍵選擇 New 裡的 Kotlin File/Class 。 雖然有許多格式可以選,但其實只是 IDE 提供初始程式碼的差別,完全可以中途更改,我們這次選最基本的 File 格式就好。 命名檔案和
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
本章節旨在教導讀者如何在 Kotlin 中引入套件。將會涵蓋如何引用第三方套件,如何引用自定義模組,以及如何創建和引用自定義套件。此外,還會列出一些常用的套件,以供讀者參考。
Thumbnail
Companion Object 是 Kotlin 中一個特殊的物件,用來在類別內部創建靜態成員。當你在一個類別內部建立 companion object 時,裡面的成員就可以像 Java 中的靜態成員一樣被使用,不需要通過該類別的實例來訪問。 結合使用 @JvmStatic 和 Companion
Thumbnail
當你在 Kotlin 中使用 val 或 var 定義一個屬性時,在 Java 中預設會轉換為 getter 和 setter 方法。如果你希望直接在 Java 中存取這個屬性,可以使用 @JvmField 註解。這會讓 Kotlin 編譯器將屬性生成為公開的,而非生成 getter 和 sette
Thumbnail
let 區域函數是 Kotlin 中一個非常實用的工具,特別適用於處理可空對象。它讓程式碼更加簡潔、安全,同時提高了可讀性。透過 let 區域函數,我們可以更優雅地處理可空性問題,使得程式開發更加高效順暢。
Thumbnail
在 Kotlin 程式語言中,當你使用 apply 函數時,你可以將其視為對該物件進行屬性設定的操作。 apply 函數讓你能夠直接在物件上執行多個設定操作,並返回該物件本身,讓程式碼更為簡潔而具有可讀性。這個函數特別適合在建立物件後立即對其屬性進行初始化或設定的情境下使用。
Thumbnail
行程 (Process),正如其名,指的是正在執行的程式 (Program),變數在其之中,是獲得命名,能保留自我的少數特殊存在。如果變數屬於全域變數 (Global Value),那麼其生命週期就會和行程一致,其他較短生命週期的都是局部變數 (Local Value)。 從一而終,在生命中止前不變
Thumbnail
接續上次的士兵類別,提到名字用了 String 變數。 String 是字串的意思,在 Kotlin 裡,常見變數可以分成幾個基本資料型別:數字(Number)、字串(String)、布林(Boolean)。 差別在於行為模式不同,以加法為例,數字執行數學課上的四則運算的加法,字串卻做了連接,布林則
Thumbnail
作為指揮官,如果只有一個部下也太令人傷心了。 為能夠有效率的取得大量的士兵,使用類型(Type)來廉價批發。 建立一個檔案「士兵.kt」,這次選 class,讓 IDE 幫我們初始化類別的程式碼 。 建立一個檔案「士兵.kt」,選 class 。  IDE 預設將 class 取名和檔案一樣。 初級
程式是個單純的小伙子,他會按照程式碼的內容執行動作,所以我們可以把函數當作給他的指令「單位」,不是最小單位,就只是單位。 以下是令人熱血沸騰的情境: 「射擊準備!發射角度東偏南33度,目標距離200公尺,風向正西速度每小時100公里,氣溫38度,濕度百分之20。」 「yes, my master.」
Thumbnail
現在,開始建立第一個檔案吧,一樣用最簡單的 Hello World 示範。 在 kotlin 資料夾按右鍵選擇 New 裡的 Kotlin File/Class 。 雖然有許多格式可以選,但其實只是 IDE 提供初始程式碼的差別,完全可以中途更改,我們這次選最基本的 File 格式就好。 命名檔案和