Kotlin let、with、run、apply、also函数的使用
let,with,run,apply,also 是內(nèi)聯(lián)擴(kuò)展函數(shù)
下面是自己使用的心的如果有錯(cuò)的地方希望給予指正謝謝
這幾個(gè)主要用來(lái)簡(jiǎn)化操作,使得代碼可讀性提高 ,下面列舉項(xiàng)目中使用效果
1 let?
?先不啰嗦了 直接代碼吧 ,
不是let? 的代碼
val list = ArrayList<String>()list.add("A")list.add("B")list.add("C")for (i in list.indices) {println(list[i])}
使用let 之后如下
val list = ArrayList<String>()list.let {it.add("A")it.add("B")it.add("C")}for (i in list.indices) {println(list[i])Log.e("==============hly=======",list[i])}
他們對(duì)比發(fā)現(xiàn)list 沒(méi)有反復(fù)的使用, 不過(guò)卻有一個(gè)it?
自己在項(xiàng)目中測(cè)試let也使用了
沒(méi)有使用let 如下?
這個(gè)是刷新的地方, 估計(jì)很多人都在使用,是不是刷新的id要寫(xiě)2次
class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener {override fun onRefresh(refreshLayout: RefreshLayout) {}override fun onLoadMore(refreshLayout: RefreshLayout) {}@SuppressLint("LongLogTag")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)smart.setOnRefreshListener { this@MainActivity }smart.setOnLoadMoreListener { this@MainActivity }
使用let如下
class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener {override fun onRefresh(refreshLayout: RefreshLayout) {}override fun onLoadMore(refreshLayout: RefreshLayout) {}@SuppressLint("LongLogTag")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)smart.let {it.setOnRefreshListener { this@MainActivity }it.setOnLoadMoreListener { this@MainActivity }}
剛才是自己點(diǎn)擊let看看源碼
/*** Calls the specified function [block] with `this` value as its argument and returns its result.*/
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}return block(this)
}
百度翻譯下 let 注釋?
以' this '值作為參數(shù)調(diào)用指定的函數(shù)[block]并返回其結(jié)果。
?
2 with
還是用剛才的list代碼 用with 試試
val list = ArrayList<String>()with(list){add("A")add("B")add("C")}for (i in list.indices) {println(list[i])Log.e("==============hly=======",list[i])}
這個(gè)寫(xiě)法和剛才的有很大差別是不是
在使用with 實(shí)現(xiàn)刷新
class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener {override fun onRefresh(refreshLayout: RefreshLayout) {}override fun onLoadMore(refreshLayout: RefreshLayout) {}@SuppressLint("LongLogTag")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//原始的smart.setOnRefreshListener { this@MainActivity }smart.setOnLoadMoreListener { this@MainActivity }//letsmart.let {it.setOnRefreshListener { this@MainActivity }it.setOnLoadMoreListener { this@MainActivity }}//withwith(smart) {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}
?
with 的源碼
?
/*** Calls the specified function [block] with the given [receiver] as its receiver and returns its result.*/
@kotlin.internal.InlineOnly
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}return receiver.block()
}
翻譯下with的注釋:
使用給定的[receiver]調(diào)用指定的函數(shù)[block]并返回其結(jié)果。
?
3 run?
使用剛才的list 如下
val list = ArrayList<String>()list.run {add("A")add("B")add("C")}for (i in list.indices) {println(list[i])Log.e("==============hly=======", list[i])}
在寫(xiě)一些刷新看看
class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener {override fun onRefresh(refreshLayout: RefreshLayout) {}override fun onLoadMore(refreshLayout: RefreshLayout) {}@SuppressLint("LongLogTag")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//原始的smart.setOnRefreshListener { this@MainActivity }smart.setOnLoadMoreListener { this@MainActivity }//letsmart.let {it.setOnRefreshListener { this@MainActivity }it.setOnLoadMoreListener { this@MainActivity }}//withwith(smart) {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}//runsmart.run {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}
?
這些我沒(méi)把let ,with 去掉方便大家對(duì)比查看,實(shí)現(xiàn)的效果是一樣的
?
run的源碼
/*** Calls the specified function [block] with `this` value as its receiver and returns its result.*/
@kotlin.internal.InlineOnly
public inline fun <T, R> T.run(block: T.() -> R): R {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}return block()
}
翻譯注釋
調(diào)用指定的函數(shù)[block],并以' this '值作為其接收方,返回其結(jié)果。
4 apply
剛開(kāi)的list 使用apply 如下
val list = ArrayList<String>()list.apply {add("A")add("B")add("C")}for (i in list.indices) {println(list[i])Log.e("==============hly=======", list[i])}
apply 實(shí)現(xiàn)的刷新 如下
class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener {override fun onRefresh(refreshLayout: RefreshLayout) {}override fun onLoadMore(refreshLayout: RefreshLayout) {}@SuppressLint("LongLogTag")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//原始的smart.setOnRefreshListener { this@MainActivity }smart.setOnLoadMoreListener { this@MainActivity }//letsmart.let {it.setOnRefreshListener { this@MainActivity }it.setOnLoadMoreListener { this@MainActivity }}//withwith(smart) {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}//runsmart.run {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}//applysmart.apply{setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}
apply的源碼
/*** Calls the specified function [block] with `this` value as its receiver and returns `this` value.*/
@kotlin.internal.InlineOnly
public inline fun <T> T.apply(block: T.() -> Unit): T {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}block()return this
}
翻譯注釋
調(diào)用指定的函數(shù)[block],并將' this '值作為其接收器,返回' this '值。
5 also
使用剛才的list also 的使用如下
val list = ArrayList<String>()list.also {it.add("A")it.add("B")it.add("C")}for (i in list.indices) {println(list[i])Log.e("==============hly=======", list[i])}
?
also 的刷新如下
class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener {override fun onRefresh(refreshLayout: RefreshLayout) {}override fun onLoadMore(refreshLayout: RefreshLayout) {}@SuppressLint("LongLogTag")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//原始的smart.setOnRefreshListener { this@MainActivity }smart.setOnLoadMoreListener { this@MainActivity }//letsmart.let {it.setOnRefreshListener { this@MainActivity }it.setOnLoadMoreListener { this@MainActivity }}//withwith(smart) {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}//runsmart.run {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}//applysmart.apply{setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}//alsosmart.also{it.setOnRefreshListener { this@MainActivity }it.setOnLoadMoreListener { this@MainActivity }}
這個(gè)幾個(gè)寫(xiě)法和對(duì)比都在這里, 我自己都一一測(cè)試過(guò)的,局可以實(shí)現(xiàn) ,
以上就是他們的使用方法 , 有不明白的或者錯(cuò)誤的希望指點(diǎn)一下,相互進(jìn)步.....
?
總結(jié)
以上是生活随笔為你收集整理的Kotlin let、with、run、apply、also函数的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: “翠黛不须留五马”下一句是什么
- 下一篇: Koltin 高阶函数