4.3 Kotlin函數(shù)字面量和閉包

歡迎前往我的CSDN

函數(shù)字面量

函數(shù)字面量有的也叫函數(shù)字面值,所謂字面量,就是不用變量直接用文本寫出,比如:”hello 你好“、"12345"等都是字面量。我們可有將這些字面量賦值給常量或者變量。

val str: String = "hello 你好"
val str1: String = "12345"

函數(shù)也可以有字面量,比如:

    {
        println("hello 最近好嗎周杰倫")
    }

與所有字面量一致,它也可以賦值給一個變量:

val show = {
    println("hello 最近好嗎周杰倫")
}

這個函數(shù)字面量只有一條語句,那么怎么調(diào)用它呢?其實跟常見函數(shù)一致,直接看如下例子:

fun main(args: Array<String>) {
    show()
}

val show = {
    println("hello 最近好嗎周杰倫")
}

結(jié)果:

hello 最近好嗎周杰倫

是不是很簡單呀。既然跟常見函數(shù)一樣,那么怎么傳遞參數(shù)呢?我們改寫下代碼:

fun main(args: Array<String>) {
    show("hello 最近好嗎周杰倫!!!!")
}

val show = {
    msg:String -> println(msg)
}

結(jié)果:

hello 最近好嗎周杰倫!!!!

它的函數(shù)調(diào)用跟有參函數(shù)是不是一樣啊。
注意:

  • ->在此處指代后面語句為執(zhí)行語句
  • 編譯器會做類型推斷,可有省略參數(shù)類型 如:msg -> println(msg)

函數(shù)字面量其實就是函數(shù)的簡寫,主要用于高階函數(shù),后面的學(xué)習(xí)中我們會大量使用。

閉包Clousure

閉包是Kotlin語言的眾多特性之一,對多數(shù)習(xí)慣使用了Java語言的開發(fā)者來說是一個很難理解的東西(實際上Java8也開始支持閉包特性),Kotlin中的閉包是一個功能性自包含模塊,可以再代碼中被當(dāng)做參數(shù)傳遞或者直接使用。

一段程序代碼通常由常量、變量和表達式組成,然后使用一對花括號“{}”來表示閉合,并包裹著這些代碼,由這對花括號包裹著的代碼塊就是一個閉包。
kotlin閉包與java 8 閉包不同,具有如下特點:

  • 它是運行的環(huán)境
  • 它持有函數(shù)的運行狀態(tài)
  • 它的內(nèi)部可以定義函數(shù)
  • 它的內(nèi)部也可以定義類

是不是看的稀里糊涂啊,沒關(guān)系我們看代碼,只要會用就行:


fun getNum(): () -> Unit {
    var a = 0 
    return fun() {
        a++
        println(a)
    }
}

fun main(args: Array<String>) {
     val num = getNum()
    num()
    num()
    num()
}

結(jié)果:

1
2
3

例子是不是看不懂啊。

fun getNum(): () -> Unit{}

我們定義了一個函數(shù),返回值是函數(shù)。
冒號后面的"()"表示 函數(shù)返回的時一個函數(shù),()里面可以寫參數(shù), ()后面是函數(shù)的返回值類型,->后面跟返回值類型,為空的時候也必須寫Unit,不可以省略。

自執(zhí)行閉包

就是在定義閉包的同時直接執(zhí)行閉包,一般用于初始化。

fun main(args: Array<String>) {
    val num = { x: Int, y: Int ->
        x+y
    }(2,9)
   println(num.absoluteValue)
}

結(jié)果:11
閉包其實是函數(shù)式編程的特點,函數(shù)式編程又博大精深,對閉包還不太了解的同學(xué),可以多學(xué)習(xí)學(xué)習(xí)關(guān)于閉包的知識,我在學(xué)習(xí)閉包的過程中就摩拜過幾位大神的博客。在這里可以推薦給大家共勉。

Kotlin語法基礎(chǔ),函數(shù)與閉包
kotlin學(xué)習(xí)筆記之閉包

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容