Kotlin中Lambda表達(dá)式與高階函數(shù)使用分析講解
編程語言的發(fā)展,通過需求,不斷的變化出新的特性,而這些特性就會使得編程變得更加的簡潔。
Lambda表達(dá)式
Lambda
表達(dá)式的出現(xiàn),一定程度上使得函數(shù)和變量慢慢的融為一體,這樣做的好處大大的方便了回調(diào)函數(shù)的使用。
在很多的情況下,其實(shí)我們的函數(shù)就只有簡單的幾行代碼,用fun
就感覺有點(diǎn)重了,而且有的時候這么大的函數(shù)結(jié)構(gòu)用起來,并不是非常的方便。
Lambda
表達(dá)式,其表達(dá)式為: {變量定義 -> 代碼塊}
其中:
lambda 函數(shù)是一個可以接收任意多個參數(shù)(包括可選參數(shù))并且返回單個表達(dá)式值的函數(shù)
val sum:(Int,Int) -> Int = {x: Int, y: Int -> x + y} println(sum(1,1))
通常對于求和的代碼,不過是普通的幾句代碼,如果定義一個函數(shù)會有點(diǎn)麻煩,這里把函數(shù) 看成一個變量,后面我們就可以知道這種寫法的威力。
Lambda
表達(dá)式 中,使用(Int,Int) -> Int
來定義變量的類型,也就是函數(shù)的類型了。當(dāng)然這一個Lambda
表達(dá)式 可以簡化為:
val sum = {x: Int, y: Int -> x + y} println(sum(1,1))
->
符號代表的是,參數(shù)到返回值。
高階函數(shù)
函數(shù)中帶有以函數(shù)為參數(shù),就稱為高階函數(shù),在c語言中,通常是以函數(shù)指針傳遞給函數(shù)參數(shù),在Kotlin
中會演變的更加的簡單。
如我們定義一個冪函數(shù)的算法,
fun powerAlgorithm(x:Int,power:(a:Int)->Int):Int{ return power(x) }
至于多少次方,通過power
來控制。如我們求三次方:
println(powerAlgorithm(2,{<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->x:Int->x*x*x}))
結(jié)果打印如下:
I/System.out: 8
再看一個更簡便的寫法:
var power3 = powerAlgorithm(2){ it*it*it }
這里有兩點(diǎn),回調(diào)函數(shù)我們可以用另外一個{}
中直接編寫,it
是一個隱藏的變量。當(dāng) lambda
中只有一個參數(shù)時,it
就可以用來代表自己。這就是我們一直講的這個it
,之前我們還不知道怎么一回事。
其實(shí)這種寫法 kotlin
中,我們已經(jīng)非常的常見了,比如map
函數(shù)。
map
函數(shù),對每個函數(shù)做一次同樣的操作,如 對鏈表中的數(shù)據(jù) 做兩倍的處理:
var numList:MutableList<Int1> = mutableListOf(1,2,3,4,5) var num2 = numList.map{it*2}
這里的it
就是那么個意思, lambda
中只有一個參數(shù)時,it
就可以用來代表自己。
簡化寫法,使用with
和apply
。
tvTest.setText("hello with") tvTest.setBackgroundColor(R.color.white) with(tvTest){ setText("hello with") setBackgroundColor(R.color.white) } tvTest.apply { setText("hello apply") setBackgroundColor(R.color.black) } var str = HashMap<String,kotlin.Int>().apply { this["age"] = 1 this["num"] = 8 }
為了避免tvTest
的多處使用,我們集中在with(tvTest)
中使用,同樣的apply
也可以這樣做,apply
可以在變量初始化的時候做,避免重復(fù)的變量多寫了很多次。
還有run
也是同樣的用法,多了一個功能:最后一行會自動被認(rèn)為是返回值類型
var len:kotlin.Int = str.run { count() }
len
的值這時候?yàn)?
小結(jié)
我們通過了函數(shù)的高級特性,知道了一些Kotlin
很好的特性,這些在后面的編程中,都起到了很好的作用,我們不需要在寫那么多的函數(shù),有的時候還找不到函數(shù)定義的地方,Lambda
使得 整個的回調(diào)函數(shù)看起來非常的簡單,但是如果太熟悉c語言的語法,這可能還重新適應(yīng)一下。
到此這篇關(guān)于Kotlin中Lambda表達(dá)式與高階函數(shù)使用分析講解的文章就介紹到這了,更多相關(guān)Kotlin Lambda與高階函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android初學(xué)者必須知道的10個技術(shù)
本篇內(nèi)容給大家整理10個作為Android初學(xué)者必須要了解和會用的技術(shù)以及詳細(xì)代碼分析,需要的朋友收藏下慢慢學(xué)習(xí)吧。2017-12-12詳解Android中常見的內(nèi)存優(yōu)化及內(nèi)存泄露場景
本文主要給大家介紹了Android中常見的內(nèi)存優(yōu)化及Android開發(fā)中容易造成內(nèi)存泄露的場景,對我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-08-08Android中實(shí)現(xiàn)OkHttp上傳文件到服務(wù)器并帶進(jìn)度
本篇文章主要介紹了Android中實(shí)現(xiàn)OkHttp上傳文件到服務(wù)器并帶進(jìn)度,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07Android 下載并打開PDF,Doc,Dwg文檔實(shí)例
本篇文章主要介紹了Android 下載并打開PDF,Doc,Dwg文檔實(shí)例,具有一定的參考價值,有興趣的可以了解一下。2017-04-04android實(shí)現(xiàn)動態(tài)顯隱進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)動態(tài)顯隱進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07Android中SwipeBack實(shí)現(xiàn)右滑返回效果
這篇文章主要介紹了Android中SwipeBack實(shí)現(xiàn)右滑返回效果的相關(guān)資料,需要的朋友可以參考下2016-02-02