let 函数
作用:主要用于配合?.操作符进行判空操作
例子:
//定义一个接口
interface Study {
fun readBook();
fun isHome(): Boolean;
}
//it关键字表当前一个参数(当只有一个参数使用it指即可)
fun testLet(study: Study) {
//直接判空在当前Lambda表达式中会持有Study对象故也可用it来指代stduy
study?.let{
study.readBook();
study.isHome();
}
}
with 函数
作用:它可以在连续调用同一个对象的多个方法时让代码更简洁
例子:
val list = listOf("Aaa","Bbb","Ccc")
//with 函数中传入了StringBuilder 对象故整个Lambda表达式中会持有这个对象并将表达式最后一行作为返回值
val result = with(StringBuilder()){
append("start print")
for (str in list){
append(str).append("\n")
}
append("print done")
toString()
}
run 函数
作用:run函数用法和场景与with类似但是语法略有不同
例子:
val list = listOf("Aaa","Bbb","Ccc")
// 只需在对象后调用run函数那么整个Lambda表达式就会持有此对象,同样最后一行也作为返回值
val result = StringBuilder().run {
append("start print")
for (str in list){
append(str).append("\n")
}
append("print done")
toString()
}
apply 函数
作用:apply函数和run函数也是类似都要在某个对象之后调用但是apply无法指定返回值,而是会自动的返回调用对象本身
例子:
val list = listOf("Aaa","Bbb","Ccc")
val result = StringBuilder().apply {
append("start print")
for (str in list){
append(str).append("\n")
}
append("print done")
}
println(result.toString())
//使用apply函数进行Android Activity的启动
//此处只是展示了apply函数的基本用法 后续结合高阶函数可以实现更加通用的启动方法
val intent = Intent(context,OtherActivity::class).apply {
//如果有较多数据这样写就比较有优势了
putExtra("flag","data")
}
context.startActivity(intent)