Kotlin學習筆記(十)Lambda表達式

fun sum1(a: Int, b: Int): Int { //一般函數表示
    return a + b
}

val int2Long2 = fun(x: Int): Long { //用常量承載匿名函數方式1
    return x.toLong()
}

val sum2 = { a: Int, b: Int -> a + b } //單行lambda表達式1 (Int,Int) -> Int

val printHello = { println("This is it") } //單行lambda表達式2 () -> Unit

val sum3 = { //多行lambda表達式
    arg1: Int, arg2: Int ->
    //參數
    println("$arg1 + $arg2 = ${arg1 + arg2}") //執行過程打印消息
    arg1 + arg2 //返回值
} // (Int,Int) -> Int

fun main(args: Array<String>) {
    println(sum3(2,3)) //調用函數1
    println(sum3.invoke(2,3)) //調用函數2(與調用函數1一致)

    args.forEach(::println) //遍歷方法1(最簡單的表達方法)

    for (x in args) { //遍歷方法2
        println(x)
    }

    args.forEach { //遍歷方法3
        println(it)
    }

    /**
     * 遍歷方法4,(與遍歷方法3一致)
     * 在forEach方法中傳入lambda表達式,
     * 傳入參數只有一個時默認是it,也可以不寫
     */
    args.forEach({ it -> println(it) })

    /**
     * 遍歷方法5
     * 當最后一個參數為lambda表達式的時候,
     * 可以將遍歷方法4中的的()括號往前移
     */
    args.forEach() { println(it) }

    args.forEach {
        if (it == "q") return //此時return的是main函數,之后的The End將不會輸出
        println(it)
    }

    args.forEach A@{ //給forEach起一個標簽名A
        if (it == "q") return@A //結束A標簽此時return的是forEach函數本身,main函數不會中斷
        println(it)
    }

    println("The End")

    /**
     * 打印匿名函數時,有N參數就是實現了FunctionN接口, N的傳入的參數個數
     */
    println(int2Long2)
    println(sum3)
    println(::printUsage) //打印具名函數(就是普通函數)需要在函數名前加::

}
運行結果
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容