最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin匿名函數(shù)使用介紹

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

1.函數(shù)的聲明

kotlin中函數(shù)的聲明和java中有所不同。

1)得有fun關(guān)鍵字修飾,

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

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

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

2.函數(shù)參數(shù)

默認(rèn)值參:如果不打算傳入值參,可以預(yù)先給參數(shù)設(shè)定默認(rèn)值

fun main() {
    //通常調(diào)用方式
    fix("xiaohua", 20)
    //age已經(jīng)給定默認(rèn)值,此時可以不傳參數(shù)
    fix("xiaohua")
}
//參數(shù)age 給定默認(rèn)值
fun fix(name: String, age: Int = 18) {
    println(name + age)
}

3.Unit函數(shù)

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

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

  println( fix("xiaohua"))

4.匿名函數(shù)

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

1)具名函數(shù)的聲明:會顯示的使用fun關(guān)鍵字修飾。

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

匿名函數(shù):

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

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

普通變量賦值:

 val hello: String = "hello"

匿名函數(shù)賦值變量:

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

3)匿名函數(shù)類型。

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

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

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

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

得到的結(jié)果是Function0<java.lang.String>

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

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

5.匿名函數(shù)的參數(shù)

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

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

1)一個參數(shù)的定義:

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

當(dāng)匿名函數(shù)的參數(shù)只有一個時,可以使用it關(guān)鍵字來表示參數(shù)名。當(dāng)有多個參數(shù)時就不能使用了。

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

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

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

3)類型推斷。

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

當(dāng)我們把匿名函數(shù)賦值給變量時,也可以不用指定函數(shù)的返回值類型,有編譯器進(jìn)行類型推斷。

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

無參數(shù)時的類型推斷:

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

一個參數(shù)的類型推斷:

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

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

多個參數(shù)的類型推斷:

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

6.lambda表達(dá)式

我們將匿名函數(shù)稱為lambda函數(shù)。將他的定義稱為lambda表達(dá)式,他的返回結(jié)果稱為lambda結(jié)果

7.定義參數(shù)

定義參數(shù)是匿名函數(shù)的函數(shù):函數(shù)的參數(shù)是另外一個匿名函數(shù)。

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

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

2)定義一個匿名函數(shù),調(diào)用具名函數(shù)時,當(dāng)作參數(shù)傳遞過去。

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

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

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

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

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

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

8.匿名函數(shù)

匿名函數(shù)還可以用于擴展Kotlin的內(nèi)置函數(shù)。

count是Kotlin用于計算字符串長度的內(nèi)置函數(shù)。

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

用匿名函數(shù)進(jìn)行擴展

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

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

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

我們又知道,當(dāng)參數(shù)只有一個時,可以用it代替

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

9.函數(shù)的引用

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

函數(shù)引用可以把一個具名函數(shù)轉(zhuǎn)換成一個值參,傳遞給其他函數(shù)。

使用lambda表達(dá)式的地方,都可以使用函數(shù)引用。

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

happyNewYear就是一個普通函數(shù)。

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

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) 函數(shù)引用的使用:雙冒號+函數(shù)名,就是這個函數(shù)的引用,可以當(dāng)做值參傳遞

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

10.函數(shù)類型作為返回類型

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

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

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

調(diào)用方法:

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

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

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

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

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

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

Kotlin的lambda就是閉包。

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

相關(guān)文章

  • Android實現(xiàn)自定義的彈幕效果

    Android實現(xiàn)自定義的彈幕效果

    現(xiàn)在的視頻網(wǎng)站基本都帶有彈幕效果,滿屏幕的文字從右到左飄來飄去??雌饋磉€蠻炫的,這篇文章就是來實現(xiàn)這個效果,大部分的都是從右向左移動漂移,本文的效果中也支持從左向右的漂移移動效果,同時也支持屏幕彈幕最多顯示個數(shù)的設(shè)置。有需要的可以參考借鑒。
    2016-08-08
  • Android中Activity之間跳轉(zhuǎn)和參數(shù)傳遞的實例

    Android中Activity之間跳轉(zhuǎn)和參數(shù)傳遞的實例

    本篇文章主要介紹了Android中Activity之間跳轉(zhuǎn)和參數(shù)傳遞的實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Android仿QQ、微信聊天界面長按提示框效果

    Android仿QQ、微信聊天界面長按提示框效果

    最近在工作項目中要實現(xiàn)一個長按提示 “復(fù)制” 的功能,類似于QQ、微信聊天界面長按提示框效果,本來想偷懶在網(wǎng)上找個開源的項目用,但是看了好幾個都不是很滿意,所以就打算按照自己的思路來實現(xiàn)一個。下面分享給大家,有需要的朋友們可以參考借鑒。
    2016-11-11
  • 利用Flutter制作一個摸魚桌面版App

    利用Flutter制作一個摸魚桌面版App

    Win10商店上架了一款名為《摸魚》的App,在下載打開之后,這個App會讓你的電腦進(jìn)入一個假更新的畫面。本文將為大家介紹如何通過Flutter制作一個桌面版的摸魚APP,快跟小編一起學(xué)習(xí)一下吧
    2021-12-12
  • Android開發(fā)中ListView自定義adapter的封裝

    Android開發(fā)中ListView自定義adapter的封裝

    這篇文章主要為大家詳細(xì)介紹了android開發(fā)中ListView自定義adapter的封裝,ListView的模板寫法,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android中RecyclerView實現(xiàn)多級折疊列表效果(二)

    Android中RecyclerView實現(xiàn)多級折疊列表效果(二)

    這篇文章主要給大家介紹了Android中RecyclerView實現(xiàn)多級折疊列表的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • 利用OPENCV為android開發(fā)畸變校正的JNI庫方法

    利用OPENCV為android開發(fā)畸變校正的JNI庫方法

    今天小編就為大家分享一篇利用OPENCV為android開發(fā)畸變校正的JNI庫方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Android學(xué)習(xí)教程之分類側(cè)滑菜單(5)

    Android學(xué)習(xí)教程之分類側(cè)滑菜單(5)

    這篇文章主要為大家詳細(xì)介紹了Android學(xué)習(xí)教程之分類側(cè)滑菜單的具體代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 解決EditText、ListView以及GridView同時使用,輸入法自動跳出來的方法

    解決EditText、ListView以及GridView同時使用,輸入法自動跳出來的方法

    本篇文章是對在Android中EditText、ListView以及GridView同時使用,輸入法自動跳出來的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Android應(yīng)用實現(xiàn)安裝后自啟動的方法

    Android應(yīng)用實現(xiàn)安裝后自啟動的方法

    今天小編就為大家分享一篇Android應(yīng)用實現(xiàn)安裝后自啟動的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08

最新評論

霍邱县| 镇宁| 巧家县| 溆浦县| 江门市| 郸城县| 湘乡市| 台前县| 广丰县| 鄂伦春自治旗| 玛多县| 沂南县| 碌曲县| 鸡泽县| 梅州市| 府谷县| 耒阳市| 内丘县| 民勤县| 无为县| 盐源县| 曲周县| 吉水县| 岑巩县| 武邑县| 孝昌县| 托里县| 秦皇岛市| 松阳县| 宁波市| 邵东县| 临夏市| 日照市| 南溪县| 普兰县| 河东区| 承德市| 沾益县| 朝阳区| 泰宁县| 察哈|