所谓标准函数,就是指Standard.kt文件中定义的函数,任何Kotlin代码都可以自由调用所有标准函数,本文主要讨论下几个常用的标准函数:
首先看看直观的对比:
传入this | 传入it | |
return lambda的最后一行 | run | let |
return this | apply | also |
run()
run()函数是具备接收者的隐式调用(apply()),返回的是lambda的最后一行(let())。
let()
let()函数能使某个变量作用于其lambda表达式里,让it关键字能引用它。let与apply比较,let会把接收者传给lambda,而apply什么都不传,匿名函数执行完,apply会返回当前接收者,而let会返回lambda的最后一行。
apply()
apply()函数可看作一个配置函数,你可以传入一个接收者,然后调用一系列函数来配置它以便使用,如果提供lambda给apply函数执行,它会返回配置好的接收者。
also()
also()函数和let函数功能相似,和let一样,also也是把接收者作为值参传给lambda,但有一点不同:also返回接收者对象,而let返回lambda结果。因为这个差异,also尤其适合针对同一原始对象,利用副作用做事,既然also返回的是接收者对象,你就可以基于原始接收者对象执行额外的链式调用。
with()
with()函数是run的变体,功能一样,但是调用with时需要值参作为其第一个参数传入。
takelf()和takeUnless()
takeIf()函数用于判断某个条件是否满足,再决定是否可以赋值变量或执行某项任务。takelf()函数类似于if语句,但它的优势是可以直接在对象实例上调用,避免了临时变量赋值的麻烦。
takeUnless()与takeIf()正好相反