欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Kotlin匿名函數使用介紹

 更新時間:2022年08月26日 09:02:52   作者:niuyongzhi  
定義時不取名字的函數,我們稱之為匿名函數,匿名函數通常整體傳遞給其他函數或者從其他函數返回,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1.函數的聲明

kotlin中函數的聲明和java中有所不同。

1)得有fun關鍵字修飾,

2)參數的聲明方式和變量聲明類似 age:Int,先寫參數名,后面跟著參數類型

3)  返回值類型寫在參數的后面。

//可見性修飾符  函數關鍵字 方法法名     參數名 參數類型          返回值
private       fun      functionName(age: Int, name: String): String {
    return name + age;
}

2.函數參數

默認值參:如果不打算傳入值參,可以預先給參數設定默認值

fun main() {
    //通常調用方式
    fix("xiaohua", 20)
    //age已經給定默認值,此時可以不傳參數
    fix("xiaohua")
}
//參數age 給定默認值
fun fix(name: String, age: Int = 18) {
    println(name + age)
}

3.Unit函數

Kotlin中沒有返回值的函數叫Unit函數,也就是說他們的返回值是Unit

可以打印一下上面定義的fix函數。打印的值是kotlin.Unit。

  println( fix("xiaohua"))

4.匿名函數

定義時不取名字的函數,被稱為匿名函數。

1)具名函數的聲明:會顯示的使用fun關鍵字修飾。

//具名函數
fun sayHello(): String {
    return "Hello world!"
}
fun main() {
    //具名函數調用
    println(sayHello())
}

匿名函數:

1)匿名函數雖然沒有名字,但是可以賦值給變量,這個變量的類型就是函數類型。就像其他變量賦值那樣。

2)和具名函數不一樣,匿名函數通常不需要return關鍵字返回數據。匿名函數會隱式的或自動返回最后一行代碼的執(zhí)行結果。

普通變量賦值:

 val hello: String = "hello"

匿名函數賦值變量:

fun main() {
    //聲明一個匿名函數,并賦值給變量sayHello
    val sayHello: () -> String = {
        "Hello world!"
    }
    //匿名函數調用
    println(sayHello())
}

3)匿名函數類型。

普通變量的類型在賦值時就指定了,或者通過類型推斷,由編譯器在編譯器指定變量類型。

那么匿名函數的類型是啥,由啥決定?

匿名函數的類型是由參數和返回值決定的。

fun main() {
    //聲明一個匿名函數,并賦值給變量sayHello
    val sayHello: () -> String = {
        "Hello world!"
    }
    //打印函數變量
    println(sayHello)
}

得到的結果是Function0<java.lang.String>

Function0:Function后的數字表示的是參數的個數,0表示無參,1表示一個參數,以此類推。

<java.lang.String> 表示的是匿名函數返回值類型。

5.匿名函數的參數

匿名函數可以不帶參數,也可以帶一個參數或多個參數。

需要帶參數時,參數類型放在匿名函數的類型定義中“()”,參數名放在函數定義中“{}”。

1)一個參數的定義:

fun main() {
    val sayHello: (name: String) -> String = { name ->
        "Hello $name!"
    }
    println(sayHello("HanMei"))
}

當匿名函數的參數只有一個時,可以使用it關鍵字來表示參數名。當有多個參數時就不能使用了。

fun main() {
    val sayHello: (name: String) -> String = {
        "Hello $it!"
    }
    println(sayHello("HanMei"))
}

2)定義多個參數的匿名函數

fun main() {
    val sayHello: (String, Int) -> String = { name, age ->
        "Hello $name$age"
    }
    println(sayHello("HanMei",18))
}

3)類型推斷。

我們知道定義普通變量時,在編碼階段可以不用給變量指定類型。

當我們把匿名函數賦值給變量時,也可以不用指定函數的返回值類型,有編譯器進行類型推斷。

這時定義匿名函數時的“: () -> String”都可以省略。

無參數時的類型推斷:

fun main() {
    val sayHello = {
        "Hello world!"
    }
    println(sayHello())
}

一個參數的類型推斷:

參數定義和返回值定義可以省略。但是必須在函數定義中,指定參數類型和參數名。

fun main() {
    val sayHello={ name:String ->
        "Hello $name!"
    }
    println(sayHello("HanMei"))
}

多個參數的類型推斷:

fun main() {
    val sayHello = { name: String, age: Int ->
        "Hello $name$age!"
    }
    println(sayHello("HanMei", 18))
}

6.lambda表達式

我們將匿名函數稱為lambda函數。將他的定義稱為lambda表達式,他的返回結果稱為lambda結果

7.定義參數

定義參數是匿名函數的函數:函數的參數是另外一個匿名函數。

1)先定義一個具名函數,接收一個匿名函數為參數。

//定義一個具名函數,接收一個String參數和一個函數參數happyNewYear
//happyNewYear: (name: String, year: Int) -> String 這個就是匿名函數的定義
fun sayhello(name: String, happyNewYear: (name: String, year: Int) -> String) {
    val year = 2022
    //在具名函數中調用傳遞進來的匿名函數
    println(happyNewYear(name,year))
}

2)定義一個匿名函數,調用具名函數時,當作參數傳遞過去。

fun main() {
    //定義一個匿名函數
    val happyNewYear = { name: String, year: Int ->
        "${name},happy ${year}!"
    }
    //調用具名函數,并把匿名函數當作參數傳遞
    sayhello("HanMei", happyNewYear)
}

3)上面的匿名函數可以不單獨定義,也可以在調用時定義實現(xiàn)。

這種寫法和java中的匿名內部類是不是很像。方法的參數new一個接口,實現(xiàn)接口中的方法。

fun main() {
    sayhello("HanMei", happyNewYear = { name: String, year: Int ->
        "${name},happy ${year}!"
    })
}

4)如果lambda是一個函數的最后一個參數,或者是唯一的參數。那么,括住lambda值參的一對圓括號可以去掉。

fun main() {
    sayhello("HanMei") { name: String, year: Int ->
        "${name},happy ${year}!"
    }
}

8.匿名函數

匿名函數還可以用于擴展Kotlin的內置函數。

count是Kotlin用于計算字符串長度的內置函數。

  val word = "HappyNewYear"
  var count = word.count()

用匿名函數進行擴展

    count =  word.count({ letter ->
        letter == 'a'
    })

我們知道:當函數的最后一個參數或只有一個參數是lambda時,那對圓括號可以省略

count =  word.count { letter -> letter == 'a' }

我們又知道,當參數只有一個時,可以用it代替

count = word.count { it == 'a' }

9.函數的引用

要把函數作為參數傳遞給其他函數,除了lambda表達式,kotlin還提供了其他方法--函數引用

函數引用可以把一個具名函數轉換成一個值參,傳遞給其他函數。

使用lambda表達式的地方,都可以使用函數引用。

1)首先定義兩個具名函數:

happyNewYear就是一個普通函數。

sayhello可以接收一個函數參數。這個函數參數可以接收一個匿名函數,也可以接收一個函數引用。

fun happyNewYear(name: String, year: Int): String {
    return "$name happy $year"
}
fun sayhello(name: String, happyNewYear: (name: String, year: Int) -> String) {
    val year = 2022
    println(happyNewYear(name, year))
}

2) 函數引用的使用:雙冒號+函數名,就是這個函數的引用,可以當做值參傳遞

fun main() {
    //::happyNewYear這個就是函數的引用,
    sayhello("HanMei",::happyNewYear)
}

10.函數類型作為返回類型

一個函數的返回值,可以是另外一個函數,函數類型也是有效的返回值類型。

sayhello是一個無參的方法,返回值類型是(String) -> String,這個表達的意思就是一個參數為String類型,返回值為String類型的匿名函數。

fun sayhello(): (String) -> String {
    return {
        val year = 2022
        "$it happy $year"
    }
}

調用方法:

fun main() {
    //調用sayhello得到這個匿名函數,并賦值給變量happyNewYear
    val happyNewYear = sayhello();
    //happyNewYear就是一個匿名函數,可以直接傳參調用
    println(happyNewYear("HanMei"))
}

注意上面的返回匿名函數有這樣一句代碼,val year = 2022;這個是定義在匿名函數中的。

也可以定義在外邊的具名函數中,匿名函數仍然可以訪問的到。

fun sayhello(): (String) -> String {
    val year = 2022
    return {
        "$it happy $year"
    }
}

這就是另外一個概念。閉包

在Kotlin中,匿名函數,能修改并引用定義在自己作用域之外的變量,匿名函數引用著定義自身的函數里的變量。也就是說sayhello返回的匿名函數,可以引用定義它的函數sayhello的變量。

Kotlin的lambda就是閉包。

到此這篇關于Kotlin匿名函數使用介紹的文章就介紹到這了,更多相關Kotlin匿名函數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Android 后臺生成長圖并分享示例(非長截圖)

    Android 后臺生成長圖并分享示例(非長截圖)

    這篇文章主要介紹了Android 后臺生成長圖并分享示例(非長截圖),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Intent傳遞對象之Serializable和Parcelable的區(qū)別

    Intent傳遞對象之Serializable和Parcelable的區(qū)別

    Intent在不同的組件中傳遞對象數據的應用非常普遍,大家都知道在intent傳遞對象的方法有兩種:1、實現(xiàn)Serializable接口、2、實現(xiàn)Parcelable接口,接下來通過本文給大家介紹Intent傳遞對象之Serializable和Parcelable的區(qū)別,感興趣的朋友一起學習吧
    2016-01-01
  • Android 日期和時間的使用實例詳解

    Android 日期和時間的使用實例詳解

    這篇文章主要介紹了Android 日期和時間的使用實例詳解的相關資料,需要的朋友可以參考下
    2016-12-12
  • Android 校驗email是否合法實現(xiàn)代碼

    Android 校驗email是否合法實現(xiàn)代碼

    這篇文章主要介紹了Android 校驗email是否合法實現(xiàn)代碼的相關資料,需要的朋友可以參考下
    2017-01-01
  • Android ListView自動生成列表條目的實例

    Android ListView自動生成列表條目的實例

    下面小編就為大家分享一篇Android ListView自動生成列表條目的實例,具有很好的 參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 簡單實現(xiàn)android輪播圖

    簡單實現(xiàn)android輪播圖

    這篇文章主要為大家詳細介紹了android輪播圖的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android自定義邊緣凹凸的卡劵效果

    Android自定義邊緣凹凸的卡劵效果

    這篇文章主要介紹了Android自定義邊緣凹凸的卡劵效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 利用Android封裝一個有趣的Loading組件

    利用Android封裝一個有趣的Loading組件

    這篇文章我們將利用Android封裝一個可以自定義配置前景色和背景色的Loading組件,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-08-08
  • Android viewpage實現(xiàn)禁止滑動的功能

    Android viewpage實現(xiàn)禁止滑動的功能

    這篇文章主要介紹了Android viewpage實現(xiàn)禁止滑動的功能的相關資料,這里附有實現(xiàn)的實例代碼,主要還是重新 ViewPage 這個類,需要的朋友可以參考下
    2016-11-11
  • Android 橫豎屏處理的知識小結

    Android 橫豎屏處理的知識小結

    這篇文章主要介紹了Android 橫豎屏處理的知識小結,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03

最新評論