網(wǎng)站首頁 編程語言 正文
編程語言的發(fā)展,通過需求,不斷的變化出新的特性,而這些特性就會(huì)使得編程變得更加的簡(jiǎn)潔。
Lambda表達(dá)式
Lambda
表達(dá)式的出現(xiàn),一定程度上使得函數(shù)和變量慢慢的融為一體,這樣做的好處大大的方便了回調(diào)函數(shù)的使用。
在很多的情況下,其實(shí)我們的函數(shù)就只有簡(jiǎn)單的幾行代碼,用fun
就感覺有點(diǎn)重了,而且有的時(shí)候這么大的函數(shù)結(jié)構(gòu)用起來,并不是非常的方便。
Lambda
表達(dá)式,其表達(dá)式為:?{變量定義 -> 代碼塊}
其中:
lambda 函數(shù)是一個(gè)可以接收任意多個(gè)參數(shù)(包括可選參數(shù))并且返回單個(gè)表達(dá)式值的函數(shù)
val sum:(Int,Int) -> Int = {x: Int, y: Int -> x + y} println(sum(1,1))
通常對(duì)于求和的代碼,不過是普通的幾句代碼,如果定義一個(gè)函數(shù)會(huì)有點(diǎn)麻煩,這里把函數(shù) 看成一個(gè)變量,后面我們就可以知道這種寫法的威力。
Lambda
表達(dá)式 中,使用(Int,Int) -> Int
來定義變量的類型,也就是函數(shù)的類型了。當(dāng)然這一個(gè)Lambda
表達(dá)式 可以簡(jiǎn)化為:
val sum = {x: Int, y: Int -> x + y} println(sum(1,1))
->
符號(hào)代表的是,參數(shù)到返回值。
高階函數(shù)
函數(shù)中帶有以函數(shù)為參數(shù),就稱為高階函數(shù),在c語言中,通常是以函數(shù)指針傳遞給函數(shù)參數(shù),在Kotlin
中會(huì)演變的更加的簡(jiǎn)單。
如我們定義一個(gè)冪函數(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
再看一個(gè)更簡(jiǎn)便的寫法:
var power3 = powerAlgorithm(2){ it*it*it }
這里有兩點(diǎn),回調(diào)函數(shù)我們可以用另外一個(gè){}
中直接編寫,it
是一個(gè)隱藏的變量。當(dāng) lambda
中只有一個(gè)參數(shù)時(shí),it
就可以用來代表自己。這就是我們一直講的這個(gè)it
,之前我們還不知道怎么一回事。
其實(shí)這種寫法 kotlin
中,我們已經(jīng)非常的常見了,比如map
函數(shù)。
map
函數(shù),對(duì)每個(gè)函數(shù)做一次同樣的操作,如 對(duì)鏈表中的數(shù)據(jù) 做兩倍的處理:
var numList:MutableList<Int1> = mutableListOf(1,2,3,4,5) var num2 = numList.map{it*2}
這里的it
就是那么個(gè)意思, lambda
中只有一個(gè)參數(shù)時(shí),it
就可以用來代表自己。
簡(jiǎn)化寫法,使用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
可以在變量初始化的時(shí)候做,避免重復(fù)的變量多寫了很多次。
還有run
也是同樣的用法,多了一個(gè)功能:最后一行會(huì)自動(dòng)被認(rèn)為是返回值類型
var len:kotlin.Int = str.run { count() }
len
的值這時(shí)候?yàn)?
小結(jié)
我們通過了函數(shù)的高級(jí)特性,知道了一些Kotlin
很好的特性,這些在后面的編程中,都起到了很好的作用,我們不需要在寫那么多的函數(shù),有的時(shí)候還找不到函數(shù)定義的地方,Lambda
使得 整個(gè)的回調(diào)函數(shù)看起來非常的簡(jiǎn)單,但是如果太熟悉c語言的語法,這可能還重新適應(yīng)一下。
原文鏈接:https://blog.csdn.net/weixin_40425640/article/details/127878091
相關(guān)推薦
- 2022-04-03 sqoop如何指定pg庫的模式(方法詳解)_相關(guān)技巧
- 2022-05-05 Python學(xué)習(xí)之流程控制與條件判斷總結(jié)_python
- 2024-03-18 SpringBoot + Mybatis 多數(shù)據(jù)源配置打印SQL失效問題(mybatis.confi
- 2023-05-22 關(guān)于PyTorch中nn.Module類的簡(jiǎn)介_python
- 2022-05-22 jquery對(duì)標(biāo)簽添加只讀(readonly)或者禁用(disabled)屬性_jquery
- 2022-07-06 C++實(shí)現(xiàn)中值濾波的示例代碼_C 語言
- 2022-01-10 Set、Map、WeakSet 和 WeakMap 的區(qū)別?
- 2022-05-23 Android實(shí)現(xiàn)手機(jī)聯(lián)系人分欄效果_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支