apply
apply函数可看作一个配置函数,你可以传入一个接收者,然后调用一系列函数来配置它以便使用,如果提供lambda给apply函数执行,它会返回配置好的接收者。
let
let函数能使某个变量作用于其lambda表达式里,让it关键字能引用它。let与apply比较,let会把接收者传给lambda,而apply什么都不传,匿名函数执行完,apply会返回当前接收者,而let会返回lambda的最后一行。
run
光看作用域行为,run和apply差不多,但与apply不同,run函数不返回接收者,run返回的是lambda结果,也就是true或者false。
with
with函数是run的变体,他们的功能行为是一样的,但with的调用方式不同,调用with时需要值参作为其第一个参数传入。
also
also函数和let函数功能相似,和let一样,also也是把接收者作为值参传给lambda,但有一点不同: also返回接收者对象,而let返回lambda结果。因为这个差异,also尤其适合针对同一原始对象,利用副作用做事,既然also返回的是接收者对象,你就可以基于原始接收者对象执行额外的链式调用。
takelf
和其他标准函数有点不一样,takelf函数需要判断lambda中提供的条件表达式,给出true或false结果,如果判断结果是true,从takelf函数返回接收者对象,如果是false,则返回null。如果需要判断某个条件是否满足,再决定是否可以赋值变量或执行某项任务,takeif就非常有用,概念上讲,takeif函数类似于if语句。但它的优势是可以直接在对象实例上调用,避免了临时变量赋值的麻烦。
takeUnless
takelf辅助函数takeUnless,只有判断你给定的条件结果是false时,takeUnless才会返回原始接收者对象。
先决条件函数
Kotlin标准库提供了一些便利函数,使用这些内置函数,你可以抛出带自定义信息的异常,这些便利函数叫做先决条件函数,你可以用它定义先决条件,条件必须满足,目标代码才能执行。