Kotlin 中的 let 關鍵字
本教程教授範圍函式 let
以及如何在 Kotlin 中使用它。
Kotlin 中的 let
函式
作用域函式提供了一種在程式碼塊內的臨時作用域內宣告變數、執行所需操作和返回一些值的方法,從而產生乾淨緊湊的程式碼。let
是 5 個作用域函式之一,即 run
、also
、apply
、with
和 let
。
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
塊中訪問。
it
是 str
的副本,我們也可以使用 lambda 表示式使用另一個名稱。let
函式返回 $str!大寫的 $gm
分配給 temp1
變數。
在 temp2
中,greetings
是一個與 str
具有相同值的變數。
Lambda 表示式有一個輸出 greetings
值和 i
的 for
迴圈。它不返回任何值。
因此,當我們列印 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
類,name
、roll
和 grade
。學生的名字最初是 null
。
這 ?
表示此引數可以為 null
。然後,我們在 main 函式中建立 Student 類的三個物件。
s1
具有所有三個引數,而不是 null
。s2
有兩個引數,roll 和 grade,但是名字是 null
,s3
有兩個引數 name 和 roll,但是沒有提到 grade。
變數 names
是學生姓名的列表,我們使用 for
迴圈訪問每個姓名。name?.let{println(it)}
首先檢查名稱是否為 null
,如果為 null
,則不執行 let
。
如果不為 null
,則將學生的姓名傳送給 let
,而 let
將列印姓名。it
是引用名稱本身的名稱物件的副本。
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