<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
程式語言的發展,通過需求,不斷的變化出新的特性,而這些特性就會使得程式設計變得更加的簡潔。
Lambda
表示式的出現,一定程度上使得函數和變數慢慢的融為一體,這樣做的好處大大的方便了回撥函數的使用。
在很多的情況下,其實我們的函數就只有簡單的幾行程式碼,用fun
就感覺有點重了,而且有的時候這麼大的函數結構用起來,並不是非常的方便。
Lambda
表示式,其表示式為: {變數定義 -> 程式碼塊}
其中:
lambda 函數是一個可以接收任意多個引數(包括可選引數)並且返回單個表示式值的函數
val sum:(Int,Int) -> Int = {x: Int, y: Int -> x + y} println(sum(1,1))
通常對於求和的程式碼,不過是普通的幾句程式碼,如果定義一個函數會有點麻煩,這裡把函數 看成一個變數,後面我們就可以知道這種寫法的威力。
Lambda
表示式 中,使用(Int,Int) -> Int
來定義變數的型別,也就是函數的型別了。當然這一個Lambda
表示式 可以簡化為:
val sum = {x: Int, y: Int -> x + y} println(sum(1,1))
->
符號代表的是,引數到返回值。
函數中帶有以函數為引數,就稱為高階函數,在c語言中,通常是以函數指標傳遞給函數引數,在Kotlin
中會演變的更加的簡單。
如我們定義一個冪函數的演演算法,
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}))
結果列印如下:
I/System.out: 8
再看一個更簡便的寫法:
var power3 = powerAlgorithm(2){ it*it*it }
這裡有兩點,回撥函數我們可以用另外一個{}
中直接編寫,it
是一個隱藏的變數。當 lambda
中只有一個引數時,it
就可以用來代表自己。這就是我們一直講的這個it
,之前我們還不知道怎麼一回事。
其實這種寫法 kotlin
中,我們已經非常的常見了,比如map
函數。
map
函數,對每個函數做一次同樣的操作,如 對連結串列中的資料 做兩倍的處理:
var numList:MutableList<Int1> = mutableListOf(1,2,3,4,5) var num2 = numList.map{it*2}
這裡的it
就是那麼個意思, lambda
中只有一個引數時,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
可以在變數初始化的時候做,避免重複的變數多寫了很多次。
還有run
也是同樣的用法,多了一個功能:最後一行會自動被認為是返回值型別
var len:kotlin.Int = str.run { count() }
len
的值這時候為2
我們通過了函數的高階特性,知道了一些Kotlin
很好的特性,這些在後面的程式設計中,都起到了很好的作用,我們不需要在寫那麼多的函數,有的時候還找不到函數定義的地方,Lambda
使得 整個的回撥函數看起來非常的簡單,但是如果太熟悉c語言的語法,這可能還重新適應一下。
到此這篇關於Kotlin中Lambda表示式與高階函數使用分析講解的文章就介紹到這了,更多相關Kotlin Lambda與高階函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45