2021-03-07 -Kotlin学习之路=函数作用域

let 操作符和 run 操作符区别

let 操作符和 run 操作功能类似,只是 let 操作符,对应传入的 Lambda 表达式不是 T 的扩展函数,而第一个参数是 T 类型,且传入了作用域对象。

apply 操作符

apply 操作的的功能,对应 Lambda 表达式是作用域对象的扩展函数,返回值是作用域对象本身(注意这里哦,前面讲的 run 和 let 返回值都是 Lambda 表达式的返回值)。

also 操作符

also 操作符的的功能,对应 Lambda 表达式的不是 T 的扩展函数,第一个参数是 T 类型(和 let 一样),返回值是 作用域对象 this (和 apply 一样)。

takeIf 操作符

判断 Lambda 表达式返回若为 ture,就会返回 this 对象,否则就是 null。


takeUnless 表达式

若 Lambda 表达式返回 false ,返回的是 this 对象,否则就是 null (与 takeIf 相反),大家自行理解吧。


https://www.wenyingzhi.com/mu-lu/zuo-yong-yu-han-shu

我们来总结下 Lambda 的几个特点吧!

Lambda 表达式的最后一句代码的返回值是表达式的返回值

若 Lambda 的参数只有一个,可以不用定义,使用 it 代替。

可以通过 (类型1,类型2)->返回值 直观快速的定义 FunctionX 的类型。

Lambda 的最终会编译成一个实现 FunctionX 的接口类,并存在一个静态对象。

若函数最后一个参数是一个 Lambda 表达式,可以将 Lambda 定义写在括号外面。若函数的参数只有一个 Lambda 表达式,括号都不用写了。

一个函数行参是一个接口且接口只有一个方法,可以直接传递一个 lambda 表达式

当一个 Lambda 有很多参数,若我们都用不到这些参数,无需给其定义名字,用 _ 代替即可。

你可能感兴趣的:(2021-03-07 -Kotlin学习之路=函数作用域)