kotlin标准函数
let
let
的作用是对一个对象执行let
中的操作,并返回指定对象
基本使用
let
中的it
表示当前对象,return@let
表示let
的返回值
1 | val str: String = "Hello" |
return@let
可以省略,let
会自动返回最后一行的表达式,即可写作
1 | val strLen: Int = str.let { |
其实本质上还是高阶函数,所以亦可写为完全形式
1 | val func: (String) -> Int = fun (it: String): Int { |
安全调用
配合空安全使用,只有在对象不为null
时才会执行let
中的操作
1 | fun main() { |
链式调用
let
的返回值可以作为下一个函数的参数,实现链式调用
1 | val result: String = str |
run
扩展函数形式
run
的作用是对一个对象执行run
中的操作,并返回指定对象,与let
的区别在于run
中的this
表示调用run
函数的当前对象
1 | val str: String = "Hello" |
非扩展函数形式
run
的非扩展函数形式是直接调用的,与run
的扩展函数的区别在于run
中的this
代表的是当前类对象
1 | val str: String = "Hello" |
with
with
有两个参数,第一个参数可以是任意对象,第二个参数是一个函数,在第二个参数的函数代码块中,可以使用this
代表第一个参数对象,并且返回任意类型的对象
1 | var textView = TextView(context) |
第二个参数的代码块中this
可以省略,于是代码可以进一步简化,如下
1 | val textView = with(TextView(context)) { |
apply
感觉和with
差不多,但是apply
的返回值是当前对象,而with
的返回值是函数的返回值,且with
需要传入一个对象,而apply
可以直接调用
1 | val textView = TextView(context).apply { |
this
同样可以省略
1 | val textView = TextView(context).apply { |
also
感觉和let
差不多,但是also
的返回值是调用它的对象,而let
的返回值是函数参数的返回值;also
一般用于执行附加操作
1 | val user = User("小明", 18).also { |