一,let
可以用来映射可空值(如果非空的话)–>Kotlin的可空性,空安全
fun testLet() {
var data: String? = "abcde"
val sub = data?.let {
it.substring(1)
println(data)
}
println(sub)
val list: MutableList<String> = mutableListOf("A","B","C")
val change = list.let {
it.add("D")
it.add("E")
it.size
}
println("list = $list")
println("change = $change")
}
let可以配合可空性 “?” 来使用,如果data=null 则不执行let内部代码,如果有返回值则直接返回null
在let中,用it表示引用对象,并可调用其方法,it不可省略。
返回值是语句块的最后一行的返回类型,若最后一行语句无返回值,则整个let语句块也无返回值
二,apply
fun testApply() = StringBuilder().apply {
for (letter in 'A'..'Z') {
append(letter)
}
append("\nNow I konw this alphabet")
length
}
fun main(args: Array<String>){
println(testApply())
}
在apply中,用this代表当前引用对象,并且调用其方法时,this可省略。区别于let中必须使用it
apply必有返回值,且返回值是当前引用对象
三,run
fun testRun(){
val data: String? = "123456"
val result = data.run {
this?.substring(2)
// this?.length
}
println(result)
val list: MutableList<String> = mutableListOf("A", "B", "C")
val change = list.run {
add("D")
add("E")
this.add("F")
size
}
println("list = $list")
println("change = $change")
}
在run中,用this代表当前引用对象,并且调用其方法时,this可省略但是在第一个表示String的时候却不能省略,看来是要分对象的。
返回值是语句块的最后一行的返回类型,若最后一行语句无返回值,则整个run语句块也无返回值
在android中,我们常在run中初始化一些数据。
四,with
fun testWith() {
val with = with(StringBuilder()) {
for (letter in 'A'..'Z') {
append(letter)
}
append("\nNow I konw this alphabet")
toString()
//length
}
println(with)
}
fun main(args: Array<String>) {
testWith()
}
在with中,用this代表当前引用对象,并且调用其方法时,this可省略。
返回值是语句块的最后一行的返回类型,若最后一行语句无返回值,则整个run语句块也无返回值
五,总结
从上面看几个语法糖的用法只有一些细微的区别,只要我们记住差别,具体怎么用就看个人爱好了。