1,apply和also
这两个函数的相同点是,函数都会返回调用者自身,区别是apply用this作为参数,而also用it作为参数
用法:
fun main(args: Array<String>) {
val list = listOf(1, 2, 3, 4, 5, 6, 7)
/**
* println
* list.size = 7
* list.size = 7
*/
list.apply { println(" list.size = $size ") }
.also { println(" list.size = ${it.size} ") }
}
2,run和let
这两个函数的相同点是,函数都不会返回调用者自身,而是返回大括号内方法体的执行结果
区别是run用this作为参数,而let用it作为参数
用法:
fun main(args: Array<String>) {
val list = listOf(1, 2, 3, 4, 5, 6, 7)
/**
* println
* list.size = true
* size 7
*/
list.run { size > 0 }.also { println(" list.size = $it ") }
val size = list.let { it.size }
println(" size $size ")
}
3,takeIf 和 takeUnless
takeIf :大括号内的函数体返回false,则函数会返回null,大括号内的函数体返回true,则函数会返回自身
takeUnless:和takeIf相反
用法:
fun main(args: Array<String>) {
val list = listOf(1, 2, 3, 4, 5, 6, 7)
/**
* println
* takeIf it.size > 0 size = [1, 2, 3, 4, 5, 6, 7]
* 返回值为nul,所以未打印
* takeUnless it.size > 0 size = [1, 2, 3, 4, 5, 6, 7]
* 返回值为nul,所以未打印
*/
list.takeIf { it.size > 0 }?.apply { println(" takeIf it.size > 0 size = $this ") }
list.takeIf { it.size < 0 }?.apply { println(" takeIf it.size > 0 size = $this ") }
list.takeUnless { it.size > 0 }?.apply { println(" takeUnless it.size > 0 size = $this ") }
list.takeUnless { it.size < 0 }?.apply { println(" takeUnless it.size > 0 size = $this ") }
}
4,with
with:顶级函数,适合对同一个对象做多次操作
fun main(args: Array<String>) {
val list = arrayListOf<Int>(1, 2, 3, 4, 5, 6, 7)
/**
* println
* list = [3, 2, 3, 14, 5, 6, 7]
*/
with(list) {
this[0] += 2
this[3] += 10
}
println(" list = $list ")
}