Jetpack Compose 教學上課講義【從零開始學 Jetpack Compose 程式設計】Kotlin 語法補充篇 - Lambda 匿名函數

 

【從零開始學 Jetpack Compose 程式設計】

線上教學課程目錄: https://bit.ly/3JF4SFA
Youtube 課程播放清單:https://bit.ly/3tFjRbx
Udemy 線上課程:https://bit.ly/3MbVnhO


lambda 匿名函數

//一個基本函數樣式長這樣
fun sum(x: Int, y: Int): Int {
    return x + y
}

//為了方便理解,拿掉參數
fun sum(): Unit {
   
}

//匿名:沒有名字,去掉名字,但這樣寫會噴錯
fun ()-> Unit {
   
}
//改成這樣
val x: () -> Unit ={}
//一般定義資料類型
val y:Int

// 匿名:沒有名字,去掉名字
// -> 回傳什麼資料型態
// () -> Unit

Trailing lambda

是最後一個參數才能這樣用,可以參考 MyApplicationTheme、Surface。

Higher-order functions and lambda expressions
https://developer.android.com/jetpack/compose/kotlin
Trailing lambda
https://developer.android.com/jetpack/compose/kotlin#trailing-lambdas

MyApplicationTheme {
        Greeting("Android")
    }

沒有參數

//一個基本函數樣式長這樣
//函數當參數傳遞
fun sum(x: () -> Unit): Unit {
    x()
    //官方源碼會多用 invoke
    x.invoke()
}


fun main() {
    //sum 改成匿名函數
    val x: () -> Unit ={ println("HKT線上教室")}
    sum(x)

    //沒有任何參數,可以改成這樣
    sum(x = { println("HKT線上教室") })

    //再簡化,去掉 x
    sum({ println("HKT線上教室") })
    
    //Compose 中例如: MyApplicationTheme、Surface
    sum { println("HKT線上教室") }
}

單個參數

//一個基本函數樣式長這樣
fun sum0(x: String) {
    println(x)
}

fun main() {
   sum0("HKT線上教室")

   //lambda 寫法
   val sum1: (String) -> Unit = { x -> println(x)}
   sum1("HKT線上教室")

   //只有一個參數,可以使用 it 代替
   val sum2: (String) -> Unit = { it -> println(it)}
   sum2("HKT線上教室")
    
}

多個參數

//一個基本函數樣式長這樣
fun sum0(x: Int, y: Int): Int {
    return x + y
}


fun main() {
    //sum0 改成匿名函數的寫法,大括號的參數透過類型推斷
    val sum1: (Int, Int) -> Int = { x, y -> x + y }
    //sum1 再簡化,大括號的參數,需要定義參數類型
    val sum2 = { x: Int, y: Int -> x + y }

    println(sum2(1, 1))
}

這個網誌中的熱門文章

nano 文字編輯器

2023 最新入門零基礎 Kotlin教學【從零開始學 Kotlin 程式設計】Kotlin 教學課程目錄 (Android Kotlin, IntelliJ IDEA, Android Studio, Android APP 開發教學)

16天記下7000單字

Android Studio 歷代版本下載點

最新入門零基礎 Java 教學【從零開始學 Java 程式設計】Java教學課程目錄 (IntelliJ IDEA 開發教學)