Kotlin 中的 let 關鍵字

Niyati Thakkar 2023年1月30日
  1. Kotlin 中的 let 函式
  2. 在 Kotlin 中使用 let 函式進行空檢查
Kotlin 中的 let 關鍵字

本教程教授範圍函式 let 以及如何在 Kotlin 中使用它。

Kotlin 中的 let 函式

作用域函式提供了一種在程式碼塊內的臨時作用域內宣告變數、執行所需操作和返回一些值的方法,從而產生乾淨緊湊的程式碼。let 是 5 個作用域函式之一,即 runalsoapplywithlet

let 函式將物件(在其上呼叫它)作為引數,對其執行操作,並返回 lambda 表示式的結果。

變數可以在 let 表示式中宣告,但這些變數不能在 let 表示式之外使用,因為 Kotlin let 是一個作用域函式。

結果可以是任何資料型別。結果不必與物件的型別相同。

語法:

var var_name = object.let{
    // lambda expression
    // declare variables
    // perform tasks
    // return some value
}

我們將使用 var 型別的 var name 變數,然後使用預定義型別或自定義類。我們可以使用 let 函式對這些變數執行操作,並使用引用物件上下文的 it 關鍵字訪問物件的值。

重新命名 it 關鍵字會將其轉換為 lambda 函式。我們可以操作變數並返回儲存在 var name 中的任何資料型別的結果。

let 函式可能返回也可能不返回任何值。如果未提及返回值,則僅返回 Kotlin.Unit

fun main(){
    var str = "Hello"
    // let function returning string
    var temp1 = str.let {
        var gm = "Good Morning"
        "$it! $gm".toUpperCase()
    }
    // let function performing println function inside it
    var temp2 = str.let{ greetings ->
        for(i in 1..3){
            println(greetings+" $i")
        }
    }
    println(str)
    println(temp1)
    println(temp2)
}

輸出:

Hello 1
Hello 2
Hello 3
Hello
HELLO! GOOD MORNING
kotlin.Unit

上面的程式碼表明,在 temp1 變數中,我們通過 str 使用 let 函式。變數 gm 只能在 let 塊中訪問。

itstr 的副本,我們也可以使用 lambda 表示式使用另一個名稱。let 函式返回 $str!大寫的 $gm 分配給 temp1 變數。

temp2 中,greetings 是一個與 str 具有相同值的變數。

Lambda 表示式有一個輸出 greetings 值和 ifor 迴圈。它不返回任何值。

因此,當我們列印 temp2 時,Kotlin.Unit 是表示變數已使用單位值初始化的輸出。此外,在對 str 字串執行兩次 let 操作後,它的值不會改變。

在 Kotlin 中使用 let 函式進行空檢查

let 函式只有在給定變數不為 null 時才能執行操作。例如,如果我們想在 Student 類中列印姓名不為 null 的學生姓名。

class Student(var name : String? = null, roll : Int, grade : Char? = 'C')
fun main(args : Array<String>){
    var s1 = Student("Jim", 9304, 'A')
    var s2 = Student(null,7493,'B')
    var s3 = Student("Pam", 2849)
    var names = listOf<String?>(s1.name,s2.name,s3.name)
    for(name in names){
        name?.let{println(it)}
    }
}

輸出:

Jim
Pam

在上面的示例中,我們建立了一個具有三個引數的 Student 類,namerollgrade。學生的名字最初是 null

? 表示此引數可以為 null。然後,我們在 main 函式中建立 Student 類的三個物件。

s1 具有所有三個引數,而不是 nulls2 有兩個引數,roll 和 grade,但是名字是 nulls3 有兩個引數 name 和 roll,但是沒有提到 grade。

變數 names 是學生姓名的列表,我們使用 for 迴圈訪問每個姓名。name?.let{println(it)} 首先檢查名稱是否為 null,如果為 null,則不執行 let

如果不為 null,則將學生的姓名傳送給 let,而 let 將列印姓名。it 是引用名稱本身的名稱物件的副本。

作者: Niyati Thakkar
Niyati Thakkar avatar Niyati Thakkar avatar

Niyati is a Technical Content Writer and an engineering student. She has written more than 50 published articles on Data Structures, Algorithms, Git, DBMS, and Programming Languages like Python, C/C++, Java, CSS, HTML, KOTLIN, JavaScript, etc. that are very easy-to-understand and visualize.

LinkedIn

相關文章 - Kotlin Keyword