Kotlin笔记-016常用高阶函数

104 阅读1分钟

常用高阶函数

函数名介绍
letval r = X.let{x -> R}
runval r = X.run{this:X -> R}
alsoval x = X.also{x -> Unit}
applyval x = X.apply{this:X -> Unit}
useval r = Closeable.use{c -> R}

使用示例:

class Student(var name: String, var age: Int)

fun main() {
    val student: Student = Student("Kotlin", 18)

    // 调用者本身作为参数传入,返回值为 Lambda 表达式返回值
    val age: Int = student.let {
        println(it.name)
        it.age
    }
    // 调用者作为Receive传入,返回值为 Lambda 表达式返回值
    val age2: Int = student.run {
        println(name)
        this.age
    }
    // 调用者本身作为参数传入,返回值为自身类型
    val student1: Student = student.also {
        it.name = "Java"
        it.age = 18
    }
    // 调用者作为Receive传入,返回值为自身类型
    val student2: Student = student.apply {
        this.name = "Java"
        this.age = 18
    }
    // 在 use 方法作用域之外,相关的IO流和异常都会被释放和处理
    File("file-path").inputStream().reader().buffered().use {
        println(it.readLine())
    }
}

常用高阶函数

函数名介绍
letval r = X.let{x -> R}
runval r = X.run{this:X -> R}
alsoval x = X.also{x -> Unit}
applyval x = X.apply{this:X -> Unit}
useval r = Closeable.use{c -> R}

使用示例:

class Student(var name: String, var age: Int)

fun main() {
    val student: Student = Student("Kotlin", 18)

    // 调用者本身作为参数传入,返回值为 Lambda 表达式返回值
    val age: Int = student.let {
        println(it.name)
        it.age
    }
    // 调用者作为Receive传入,返回值为 Lambda 表达式返回值
    val age2: Int = student.run {
        println(name)
        this.age
    }
    // 调用者本身作为参数传入,返回值为自身类型
    val student1: Student = student.also {
        it.name = "Java"
        it.age = 18
    }
    // 调用者作为Receive传入,返回值为自身类型
    val student2: Student = student.apply {
        this.name = "Java"
        this.age = 18
    }
    // 在 use 方法作用域之外,相关的IO流和异常都会被释放和处理
    File("file-path").inputStream().reader().buffered().use {
        println(it.readLine())
    }
}