1、标准函数with
1.1、Kotlin中的标准函数指的是Standard.kt(emmm...虽然可能并没多大的用但是这个文件我不知道要怎么找)文件中自定义的函数,任何Kotlin代码都可以自由的调用所有的标准函数。
1.2、with函数:with函数接收两个参数,第一个参数可以是任意类型的对象,第二个参数是一个Lambda表达式。
1.3、with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值。
val result = with(obj) {
// 这里是obj的上下文
"value" // with函数的返回值
}
1.4、with函数可以在连续调用同一个对象的多个方法时让代码变得更加精简。
val list = listOf("Apple","Banana","Orange","Pear","Grape")
val builder = StringBuilder()
builder.append("Start eating fruits.\n")
for (fruit in list){
builder.append(fruit).append("\n")
}
builder.append("Ate all fruits.")
val result = builder.toString()
println(result)
用with简化
val list = listOf("Apple","Banana","Orange","Pear","Grape")
val result = with(StringBuilder()){// 给with函数的第一个参数传入了StringBuilder对象,那么接下来整个Lambda表达式的上下文就会是这个StringBuilder对象
append("Start eating fruits.\n")
for(fruit in list){
append(fruit).append("\n")
}
append("Ate all fruits.")
toString()//最后一行会作为with函数的返回值
}
println(result)//将结果打印出来
2、标准函数run
2.1、run函数通常不会直接调用,而是要在某个对象的基础上调用。
2.2、run函数只接收一个Lambda参数,并且会在Lambda表达式中提供调用对象的上下文。
2.3、其他方面和with函数一样,包括也会使用Lambda表达式中的最后一行代码作为返回值返回。
val result = obj.run{
// 这里是obj的上下文
"value" // run函数的返回值
}
2.4、用run函数简化之前的代码
val list = listOf("Apple","Banana","Orange","Pear","Grape")
val result = StringBuilder().run{// 将调用with函数并传入StringBuilder对象改成了调用StringBuilder对象的run方法
append("Start eating fruits.\n")
for(fruit in list){
append(fruit).append("\n")
}
append("Ate all fruits.")
toString()
}
println(result)
3、标准函数apply
3.1、apply函数和run函数类似,都要在某个对象上调用,并且只接收一个Lambda参数,也会在Lambda表达式中提供调用对象的上下文,但是apply函数无法指定返回值,而是会自动返回调用对象本身。
val result = obj.apply{
// 这里是obj 的上下文
}
// result == obj
3.2、用apply函数简化之前的代码
val list = listOf("Apple","Banana","Orange","Pear","Grape")
val result = StringBuilder().apply{
append("Start eating fruits.\n")
for(fruit in list){
append(fruit).append("\n")
}
append("Ate all fruits.")
}
println(result.toString())// 因为apply函数无法指定返回值,只能返回调用对象本身,因此这里的result是一个StringBuilder对象,需要在打印的时候调用它的toString()方法才行
3.3、启动Activity最佳写法语句可以精简成:
Demo地址:https://gitee.com/aaron222/activitytest.git