Kotlin - 作用域函数

作用域函数:是Kotlin标准库中的内联函数,作用在对象上时,执行给定的block代码块。

可以在block代码块中通过it,this代表当前对象,进行代码逻辑处理。

公有5种作用域函数: let,run ,with,apply,also

let:在对象上调用时,let执行给定的block代码块并返回其最后一个表达式的结果
it代表当前对象

val empty = "test".let {               // 1
        println(it.uppercase())
        it.isEmpty()                       // 3
        println()
        it
    }.let { str: String ->
        println("it = str = $str")
        val resultStr = str.uppercase()
        println("result = $resultStr")
        resultStr
    }

run,跟let一样,执行给定的block代码块并返回其最后一个表达式的结果,但是当前对象用this表示

val empty2 = "test".run {
        println("run = str = $this")
        val resultStr = this.uppercase()
        println("result = $resultStr")
        resultStr
        // this.length  this可以省去
        length
    }

with 非扩展函数 ,当前对象用this表示,但是在使用时可以省略this,直接使用对象的属性
常见用法:调用对象方法,调用对象属性等

class Configuration(var host: String, var port: Int) 

fun main() {
    val configuration = Configuration(host = "127.0.0.1", port = 9000) 
    with(configuration) {
        println("$host:$port")
    }
    // instead of:
    println("${configuration.host}:${configuration.port}")    
}

apply : 执行block代码块,并返回对象本身。当前对象用this表示,使用时可以省略

常见用法:初始化对象,并给属性赋值

data class Person(var name: String, var age: Int, var about: String) {
    constructor() : this("", 0, "")
}

fun main() {
    val jake = Person()                                     // 1
    val stringDescription = jake.apply {                    // 2
        this.name = "Jake"                                       // 3
        age = 30
        about = "Android developer"
    }.toString()                                            // 4
    println(stringDescription)
}

also 跟apply比较像,执行block代码块并返回当前对象,当前对象用 it 表示

val jake2 = Person("Jake", "30", "Android developer")   // 1
    jake2.also {
        println("A new person ${it.name} was created.")
    }

kotlin activity中的简单使用:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值