Kotlin第十讲---作用域函数

前介

Kotlin 中提供了一种扩展函数,功能尤为的强大。又为我们提供了 Lambda 表达式,简化我们的开发。在这些基础上 Kotlin 为我们提供了一系列的作用域函数(本质上还是通过扩展函数实现 + Lambda 实现的)。

作用域函数

什么是作用域函数呢?我的理解就是所有的对象,都可以使用这些函数来简化我们的操作,减少中间变量的创建,让我们的功能可以链式方式实现。(纯属个人理解)

常见的作用域函数

接下来我们看看 Kotlin 为我们提供了那些常用的作用域函数呢?又有和区别呢?

run 操作符

run 操作符的的功能,对应 Lambda 表达式中的 this 就是作用域对象。返回值是 Lambda 表达式的返回值。看完这句话是不是一头雾水呀?大家直接看代码吧!

fun main() {
   
    val data = Data("阿文", 18)
    val reslut = data.run {
   
        name = "阿文2"
        "修改完成"
    }
    println(reslut)
    println(data.name)
}

输出结果:  
修改完成  
阿文2

代码中我调用 data 对象的 run 方法,且传入了一个 Lambda 表达式,且在 Lambda 表达式中直接访问和修改了 dataname 属性,最后 Lambda 表达式的返回值是 修改完成。(思考为何 Lambda 表达式能直接访问 data 对 象的属性呢?)

想不到?那我们看下源码吧。

public inline fun <T, R> T.run(block: T.() -> R): R {
   
    。。。
    return block()
}

可以看到 run 方法的本质是通过扩展函数来实现的(所有的作用域函数都是通过扩展函数来实现)。首先通过定义了 2 个泛型 <T, R> 且没有加任何类型约束,也就是说任何类型都可以调用,对应 T 是作用域对象,R 是输出类型。

注意传入的 Lambda 表达式,又是一个 T 扩展函数(这就是为啥 Lambda 能直接访问作用域对象的属性原因),且 Lambda 表达式返回值的是 R 类型。

接下来看看函数体,就一句关键代码,调用了传入的 Lambda 表达式。且整个 run 函数,返回了 Lambda 的返回结果。

let 操作符

let 操作符,对应传入 Lambda 表达式的 it 对象就是作用域对象( it 代表的是 Lambda 第一个参数,Lambda 表达式篇中讲过哦),返回值是 Lambda 表达式的返回值。

fun main() {
   
    val data = Data(&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值