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

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

let

在 Kotlin 程式語言中,透過 let 可對可為空的物件做非空檢查,然後將該物件傳遞至 Lambda 表達式中作為參數。在 Lambda 中,你可以使用特定名稱(如 it)來操作該物件,而不必每次都使用原始變數名稱。

let 區域函數,使用時機一

在這個範例中,檢查 str 資料值是不是 null,不是 null 非空值 ,才執行大括號內的邏輯程式區塊。這使得我們可以安全地訪問 str 的屬性和方法,而無需擔心 null 引用造成不可預期的錯誤。

fun main() {
var str: String? = "HKT線上教室"
// str = null

str?.let {
println(it)
println(it.length)
}
}

let 區域函數,使用時機二

在這個範例中,我們將 listOf(1, 2, 3).first() 的結果傳遞給了 let 區域函數,它允許我們以更簡潔的方式對 it 進行操作並返回新的計算結果。

fun main() {
val getFirstNum = listOf(1, 2, 3).first().let {
println(it) //1
it * 666
}

println(getFirstNum) //666
}

使用 let 改寫,if/else

let 區域函數可以取代 if/else 的使用,讓程式碼更為精簡。在這個範例中,展示如何使用 let 區域函數取代 if/else 檢查。如果 userName 不為 null,則返回"哈囉~ $userName",否則返回"尚未登入"。這種方式使程式碼更加簡潔易讀。

//使用 if/else
fun login1(userName: String?): String {
return if (userName != null) {
"哈囉~ $userName"
} else {
"尚未登入"
}
}

//使用 let 改寫 if/else
fun login2(userName: String?): String {
return userName?.let {
"哈囉~ $it"
} ?: "尚未登入"
}

fun main() {
println(login1(null))
println(login1("HKT線上教室"))

println(login2(null))
println(login2("HKT線上教室"))
}

let 區域函數功能表

let 區域函數功能表

let 區域函數功能表

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

在這個範例中,展示了如何使用 let 區域函數來處理 Android 中的 TextView 物件。避免了反覆進行 null 檢查,使得程式碼更為簡潔清晰。

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

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

//使用 let 區域函數
textView?.let {
it.text = "HKT線上教室"
it.setTextColor(Color.parseColor("#ffd700"))
it.textSize = 66f
}

let 區域函數是 Kotlin 中一個非常實用的工具,特別適用於處理可空對象。它讓程式碼更加簡潔、安全,同時提高了可讀性。透過 let 區域函數,我們可以更優雅地處理可空性問題,使得程式開發更加高效順暢。

7會員
220內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言0
查看全部
發表第一個留言支持創作者!
HKT實驗室 的其他內容
run 函數,可以把它視為 let 和 with 兩者合而為一出來的一個函數。怎麼說呢? 因為 run 函數,如同 let 函數可以優雅的判斷物件是否為 null。也同時擁有 with 函數,對同一個對象多次設定屬性的便捷寫法。
當我們需要對特定物件進行多個操作時,傳統的做法是每次都要重複寫下該物件的名稱,這不僅冗長,還可能降低程式碼的可讀性。而 with 函數則能夠解決這個問題,它的作用是將指定物件傳遞給 lambda 函數,在該函數內可以直接訪問該物件的屬性和方法。
在 Kotlin 程式語言中,當你使用 apply 函數時,你可以將其視為對該物件進行屬性設定的操作。 apply 函數讓你能夠直接在物件上執行多個設定操作,並返回該物件本身,讓程式碼更為簡潔而具有可讀性。這個函數特別適合在建立物件後立即對其屬性進行初始化或設定的情境下使用。
在 Kotlin 裡,also 函式能夠在物件上執行一連串操作,同時回傳該物件本身。儘管 also 與 let 函式有相似之處,但兩者仍有些許差異。主要區別在於它們的回傳值:also 函式會回傳物件本身,而 let 函式則回傳 Lambda 運算後的結果。這個差別影響了它們在程式碼中的適用情境。
Kotlin 標準函式庫中有五個函數,它們的目的是在一個物件的範圍內執行一段程式碼。這些函數分別是 let, run, with, apply, 和 also。它們的差別在於物件在程式碼中的可用方式和整個表達式的回傳值。
takeIf 與 takeUnless 函數在 Kotlin 程式語言中,提供了一種更具彈性和簡潔的方式來處理條件性邏輯。它們讓程式碼更易讀、更容易維護,同時減少了不必要的重複代碼。藉由善用這兩個函數,你能夠提升自己的程式撰寫效率,寫出更具可讀性且高效的 Kotlin 程式碼。
run 函數,可以把它視為 let 和 with 兩者合而為一出來的一個函數。怎麼說呢? 因為 run 函數,如同 let 函數可以優雅的判斷物件是否為 null。也同時擁有 with 函數,對同一個對象多次設定屬性的便捷寫法。
當我們需要對特定物件進行多個操作時,傳統的做法是每次都要重複寫下該物件的名稱,這不僅冗長,還可能降低程式碼的可讀性。而 with 函數則能夠解決這個問題,它的作用是將指定物件傳遞給 lambda 函數,在該函數內可以直接訪問該物件的屬性和方法。
在 Kotlin 程式語言中,當你使用 apply 函數時,你可以將其視為對該物件進行屬性設定的操作。 apply 函數讓你能夠直接在物件上執行多個設定操作,並返回該物件本身,讓程式碼更為簡潔而具有可讀性。這個函數特別適合在建立物件後立即對其屬性進行初始化或設定的情境下使用。
在 Kotlin 裡,also 函式能夠在物件上執行一連串操作,同時回傳該物件本身。儘管 also 與 let 函式有相似之處,但兩者仍有些許差異。主要區別在於它們的回傳值:also 函式會回傳物件本身,而 let 函式則回傳 Lambda 運算後的結果。這個差別影響了它們在程式碼中的適用情境。
Kotlin 標準函式庫中有五個函數,它們的目的是在一個物件的範圍內執行一段程式碼。這些函數分別是 let, run, with, apply, 和 also。它們的差別在於物件在程式碼中的可用方式和整個表達式的回傳值。
takeIf 與 takeUnless 函數在 Kotlin 程式語言中,提供了一種更具彈性和簡潔的方式來處理條件性邏輯。它們讓程式碼更易讀、更容易維護,同時減少了不必要的重複代碼。藉由善用這兩個函數,你能夠提升自己的程式撰寫效率,寫出更具可讀性且高效的 Kotlin 程式碼。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
會撰寫 Hello World 程式,證明我們已經推開程式語言的大門,成為會寫這門語言的開發者,所以,現在就先來寫 Hello World 吧。 目標:印出 Hello World 這串文字。
Thumbnail
所謂專案,就是項目,或者說是主題。 比如說我今天打算寫個猜數字遊戲,於是就建立一個名為「猜數字」的專案。 如果要和外國人合作開發,專案名稱取英文會比較好,雖然不是每個外國人英文都很好,但是工程師要有基本的英文閱讀能力,科技界很多第一手消息都是英文,我們用的開發介面 Intellij IDEA
也許有人聽過, Kotlin 是物件導向語言。 既然都特別提了,肯定還有其他種語言,那就是程序導向語言。 最大的差別就是因為物件導向語言有了物件的概念,所以有了三大能力:繼承(Inheritance)、封裝(Encapsulation)和多型(Polymorphism)。
到官方網站 https://www.jetbrains.com/idea/ 下載名為 IntelliJ IDEA 的 IDE (整合開發環境:意味著撰寫、編譯、連結、除錯、執行等步驟全都包)。 因為安裝只要按照預設選項不停地點下一步,所以就不另做說明了,如果讀者有遇到安裝問題,可以留言提問。
Thumbnail
這幾天參加了 Kotlin Hero 程式競賽前的練習,有個特別的體驗。 看題目一邊理解題意時,一邊就會在心理想像出程式流程的設計長得怎麼樣,比如輸入數值的型態為何?需不需要字串拆解?用什麼迴圈或遞迴編碼結構?一邊實作出來。或是歸納題意後,用數學運算公式整理簡化,比如真值表簡化換算,或是套用等差級數
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
會撰寫 Hello World 程式,證明我們已經推開程式語言的大門,成為會寫這門語言的開發者,所以,現在就先來寫 Hello World 吧。 目標:印出 Hello World 這串文字。
Thumbnail
所謂專案,就是項目,或者說是主題。 比如說我今天打算寫個猜數字遊戲,於是就建立一個名為「猜數字」的專案。 如果要和外國人合作開發,專案名稱取英文會比較好,雖然不是每個外國人英文都很好,但是工程師要有基本的英文閱讀能力,科技界很多第一手消息都是英文,我們用的開發介面 Intellij IDEA
也許有人聽過, Kotlin 是物件導向語言。 既然都特別提了,肯定還有其他種語言,那就是程序導向語言。 最大的差別就是因為物件導向語言有了物件的概念,所以有了三大能力:繼承(Inheritance)、封裝(Encapsulation)和多型(Polymorphism)。
到官方網站 https://www.jetbrains.com/idea/ 下載名為 IntelliJ IDEA 的 IDE (整合開發環境:意味著撰寫、編譯、連結、除錯、執行等步驟全都包)。 因為安裝只要按照預設選項不停地點下一步,所以就不另做說明了,如果讀者有遇到安裝問題,可以留言提問。
Thumbnail
這幾天參加了 Kotlin Hero 程式競賽前的練習,有個特別的體驗。 看題目一邊理解題意時,一邊就會在心理想像出程式流程的設計長得怎麼樣,比如輸入數值的型態為何?需不需要字串拆解?用什麼迴圈或遞迴編碼結構?一邊實作出來。或是歸納題意後,用數學運算公式整理簡化,比如真值表簡化換算,或是套用等差級數