一、let 扩展函数
let.kt文件代码
fun main() {
    println("isEmpty = $isEmpty")
    printNonNull(null)
    printNonNull("my string")
    printIfBothNonNull("First","Second")
    //下面是运行结果
    //test
    //isEmpty = false
    //Printing "null":
    //Printing "my string":
    //	my string
    //
    //First : Second
}
val isEmpty = "test".let {
    println(it)               // 2
    it.isEmpty()
}
fun printNonNull(str:String?){
    println("Printing \"$str\":")
    str?.let {
        print("\t")
        println(it)
        println()
    }
}
fun printIfBothNonNull(strOne: String?, strTwo: String?) {
    strOne?.let { firstString ->
        strTwo?.let { secondString ->
            println("$firstString : $secondString")
            println()
        }
    }
}
 
 
二、run 扩展函数
run.kt文件代码
fun getNullableLength(ns: String?) {
    println("for \"$ns\":")
    val resutl = ns?.run {
        println("\tis empty? " + isEmpty())
        println("\tlength = $length")
        length
    }//返回最后一行
    println("resutl = $resutl")
}
fun main(){
    getNullableLength(null)
    getNullableLength("")
    getNullableLength("some string with Kotlin")
	//下面是运行结果
    //for "null":
    //resutl = null
    //for "":
    //	is empty? true
    //	length = 0
    //resutl = 0
    //for "some string with Kotlin":
    //	is empty? false
    //	length = 23
    //resutl = 23
}
 
 
三、with函数
with.kt文件代码
fun main() {
    val personal = Personal("test", 20)
    val withResult = with(personal) {
        println("name = $name")
        println("age = $age")
        21
        22
    }
    println("withResult = $withResult")
    //name = test
    //age = 20
    //withResult = 22
}
class Personal(var name: String, var age: Int)
 
 
四、apply扩展函数
apply.kt文件代码
fun main() {
    val jake = Person()
    val stringDescription = jake.apply {
        name = "Jake"
        age = 30
        about = "Android developer"
    }.toString()
    println("stringDescription  = $stringDescription")
    //stringDescription  = Person(name=Jake, age=30, about=Android developer)
}
class Person() {
    var name: String? = null
    var age: Int = 20
    var about: String? = null
    override fun toString(): String {
        return "Person(name=$name, age=$age, about=$about)"
    }
}
 
 
五、also扩展函数
also.kt文件代码
fun main() {
    val jake = Person2().also {
        println(it)
    }
    getPerson().also {
        it.token?.let { tempToen -> login(tempToen) }
    }
}
class Person2(
    var name: String = "test",
    var age: Int = 0,
    var about: String? = null
) {
    var token: String? = null
    override fun toString(): String {
        return "Person(name=$name, age=$age, about=$about)"
    }
}
fun login(toke: String) {
}
fun getPerson(): Person2 = Person2()
 
 
推荐
Kotlin: 协程的四种启动模式(CoroutineStart)










