【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )
文章目錄
- I . Lambda 表達式 簡介
- II . Lambda 表達式語法
- III . Lambda 表達式類型
- IV . Lambda 表達式返回值
- V . Lambda 表達式調用
- VI . Lambda 表達式完整語法示例 ( 聲明 | 實現 | 調用 )
I . Lambda 表達式 簡介
Lambda 表達式 簡介 :
① 作用 : Lambda 表達式可以作為函數參數 , 傳遞到函數中 , 使代碼結構更加緊湊 ;
② 應用場景 : 集合中擴展集合操作 , 當做函數參數 , 替代匿名內部類 ;
③ 好處 : Lambda 表達式語法簡潔 , 避免了冗長的函數聲明調用過程 ;
④ 函數式編程 : 函數作為輸入和輸出 ; 在集合操作中 , 過濾 filter , 映射 map 等操作傳入 Lambda 表達式 作為參數 , 很好地體現了函數式編程思想 ;
II . Lambda 表達式語法
Lambda 表達式 語法 :
{ a : Int, b : Int -> a + b}
① 示例說明 : 上面的代碼示例是 Lambda 表達式的標準形式 , 其參數列表是 a : Int, b : Int , 在 -> 后面的函數體中, 可以直接調用 a 和 b 兩個變量 ;
② 大括號 : Lambda 表達式需要完整的寫在大括號中 , 其參數列表 , 執行代碼 , 返回值 , 都寫在一個大括號 {} 里 ;
③ 參數列表 : Lambda 表達式的參數列表 , 定義在 “->” 符號之前 , 格式為 “變量名 : 變量類型” , 多個參數使用逗號隔開 ;
④ 函數體 : Lambda 表達式的函數體可以由 111 行 , 也可以有多行 , 最后一行默認是 Lambda 表達式的返回值 ;
⑤ -> 符號 : 用于分割 參數列表 與 函數體 ;
III . Lambda 表達式類型
1 . Lambda 表達式 類型 : 分析下面示例中的 var add : (Int, Int)->Int 變量類型聲明部分 ;
var add : (Int, Int)->Int = { a : Int, b : Int ->println("計算 : a + b = ${a + b}")a + b }
① 變量或常量 : Lambda 表達式可以聲明成變量 var , 也可以聲明成常量 val ;
② 變量 / 常量 名稱 : 符合標識符規則即可 ;
③ Lambda 表達式參數列表 : 在括號中 () 表示 , 如果沒有參數 , 括號內空著即可 , 如果有多個參數使用逗號隔開 ;
④ -> 符號 : 在 Lambda 表達式類型中 , 用于分割 參數列表 和 返回值類型 ;
⑤ Lambda 表達式返回值 : 只允許有一個返回值 , 在 -> 符號之后 , 如果返回值為空 , 記作 Unit ;
2 . Lambda 表達式 類型聲明 示例 :
① 無參數 空類型返回值 的 Lambda 表達式 類型 : ()->Unit , 無參數 () 內空著 , 返回值為空 , 記作 Unit ;
// 無參數 Unit 空類型返回值的 Lambda 表達式 var lambda1 : ()-> Unit = { println("lambda1") }② 單個參數 Int 類型返回值 的 Lambda 表達式 類型 : (Int)->Int , 其參數是 Int 類型 , 返回值也是 Int 類型的 ;
// Int 類型參數 , Int 類型返回值 , 的 Lambda 表達式 var lambda2 : (Int)-> Int = { a : Int -> a + 1000}③ 多個參數 Int 類型返回值 的 Lambda 表達式 類型 : (Int, Int)->Int , 其有兩個 Int 類型參數 , 使用逗號隔開 ;
// 多個參數的 Lambda 表達式 var lambda4 : (Int, Int)->Int = { a : Int, b : Int ->println("計算 : a + b = ${a + b}")a + b }④ 使用 Lambda 表達式作為參數 String 返回值類型 的 Lambda 表達式類型 : (Int, Int, (Int, Int)->Int)->Int , 該 Lambda 表達式類型有 333 個參數 , 分別是兩個 Int 和 (Int, Int)->Int , 最后一個參數的類型是 Lambda 表達式類型 ;
// Lambda 表達式類型作為參數的 Lambda 表達式 , 第 3 個參數是 Lambda 表達式類型的參數 var lambda5 : (Int, Int, (Int, Int)->Int)->Int = { a : Int, b : Int, c : (Int, Int)->Int ->println("計算 : a + b = ${c.invoke(a, b)}")c.invoke(a, b) }這里關于 Unit 空類型說明一下 , 如果沒有參數 , 括號中空著即可 , 如果返回值為空類型 , 必須寫成 Unit 類型的返回值 , 相當于 Java 中的 void 空類型 ;
IV . Lambda 表達式返回值
1 . Lambda 表達式返回值 :
// 多個參數的 Lambda 表達式 var lambda4 : (Int, Int)->Int = { a : Int, b : Int ->println("計算 : a + b = ${a + b}")a + b }
① 返回值設置 : Lambda 表達式的返回值是 Lambda 表達式函數體的最后一行 ;
② 代碼解析 : 如上述代碼 , 其函數體部分有兩行組成 , 第一行 println("計算 : a + b = ${a + b}") 打印計算公式 , 第二行才是真正的返回值 , 表示返回 a + b 的值 , 作為 Lambda 表達式的返回值 ;
③ 調用返回值 : 即使用 lambda4.invoke( 1 , 2 ) 或 lambda4 ( 1, 2 ) 調用 Lambda 表達式 , 返回 1 + 2 = 3 計算結果 , 最終都返回 3 ;
2 . 返回值類型錯誤 : 注意不要放錯位置 , 如果最后一行的結果類型 , 與 Lambda 表達式的類型不一致 , 不是 Int 類型的返回值 , 會導致錯誤產生 ; 如下圖示例 , 在最后一行寫成字符串類型 , 編譯時直接報錯 ;
V . Lambda 表達式調用
1 . Lambda 表達式調用 : 使用 invoke 方法 , 或直接當做函數調用 , 即可調用 Lambda 表達式 ;
① 直接調用 : 調用格式為 “Lambda表達式變量 / 常量 ( 實際參數列表 )” ;
② invoke 調用 : 調用格式為 “Lambda表達式變量 / 常量.invoke( 實際參數列表 )” ;
2 . Lambda 表達式調用示例 :
① Lambda 表達式 代碼示例 :
// 4 . 多個參數的 Lambda 表達式 var lambda4 : (Int, Int)->Int = { a : Int, b : Int ->println("計算 : a + b = ${a + b}")a + b }② Lambda 表達式調用方法 : 使用 lambda4.invoke(1, 2) 和 lambda4(1, 2) 兩種形式 , 都可以調用 Lambda 表達式 ;
fun main() {println("${lambda4.invoke(1, 2)}")println("${lambda4(1, 2)}") }③ Lambda 表達式調用 執行結果 : 兩種調用方式實現的效果是一樣的 ;
計算 : a + b = 3 3 計算 : a + b = 3 3VI . Lambda 表達式完整語法示例 ( 聲明 | 實現 | 調用 )
Lambda 表達式完整示例 : 下面的示例中 , 分別聲明了 555 種不同類型的 Lambda 表達式示例 , 并使用不同的方法進行調用 ;
// 1 . 無參數 Unit 空類型返回值的 Lambda 表達式 var lambda1 : ()-> Unit = { println("lambda1") }// 2 . Int 類型參數 , Int 類型返回值 , 的 Lambda 表達式 var lambda2 : (Int)-> Int = { a : Int -> a + 1000}// 3 . 多行代碼的 Lambda 表達式, 最后一行是返回值 var lambda3 : (Int)-> Int = { a : Int ->println("lambda3 多行代碼")a + 1000 }// 4 . 多個參數的 Lambda 表達式 var lambda4 : (Int, Int)->Int = { a : Int, b : Int ->println("計算 : a + b = ${a + b}")a + b }// 5 . Lambda 表達式類型作為參數的 Lambda 表達式 , 第 3 個參數是 Lambda 表達式類型的參數 var lambda5 : (Int, Int, (Int, Int)->Int)->Int = { a : Int, b : Int, c : (Int, Int)->Int ->println("計算 : a + b = ${c.invoke(a, b)}")c.invoke(a, b) }fun main() {//1 . 調用 無參數 Unit 空類型返回值的 Lambda 表達式 , 分別用兩種形式進行調用println("\n執行 lambda1 調用 : \n")println("${lambda1.invoke()}")println("${lambda1()}")//2 . Int 類型參數 , Int 類型返回值 , 的 Lambda 表達式println("\n執行 lambda2 調用 : \n")println("${lambda2.invoke(100)}")println("${lambda2(100)}")//3 . 調用 多行代碼的 Lambda 表達式println("\n執行 lambda3 調用 : \n")println("${lambda3.invoke(200)}")println("${lambda3(200)}")//4 . 調用 多個參數的 Lambda 表達式println("\n執行 lambda4 調用 : \n")println("${lambda4.invoke(1, 2)}")println("${lambda4(1, 2)}")//5 . 調用 Lambda 表達式類型作為參數的 Lambda 表達式 , 第 3 個參數是 Lambda 表達式類型的參數println("\n執行 lambda5 調用 : \n")println("${lambda5.invoke(3 , 4 , lambda4)}")println("${lambda5(3 , 4 , lambda4)}") }
執行結果 :
執行 lambda1 調用 : lambda1 kotlin.Unit lambda1 kotlin.Unit執行 lambda2 調用 : 1100 1100執行 lambda3 調用 : lambda3 多行代碼 1200 lambda3 多行代碼 1200執行 lambda4 調用 : 計算 : a + b = 3 3 計算 : a + b = 3 3執行 lambda5 調用 : 計算 : a + b = 7 計算 : a + b = 7 計算 : a + b = 7 7 計算 : a + b = 7 計算 : a + b = 7 計算 : a + b = 7 7總結
以上是生活随笔為你收集整理的【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Kotlin】变量简介 ( 可空类型
- 下一篇: 【Kotlin】函数类型 ( 函数类型