kotlin 范围函数(Scope Functions)

本文介绍了 Kotlin 中的五个范围函数:let, with, run, apply 和 also,包括它们的区别、应用场景及返回值特点。let 用于链式调用和对象非空判断,with 适用于一次性操作对象,run 和 apply 主要改变对象引用,而 also 则提供额外操作。文章通过实例展示了这些函数如何简化代码和提高可读性。" 107152820,8768333,Linux动态链接库:创建与使用DLL,"['Linux', 'C++', '操作系统', '程序设计']
摘要由CSDN通过智能技术生成

1 概述

范围函数是一种能作用在某个对象上的 block(代码块,也可以叫闭包或匿名函数),可以在代码块中方便的引用目标对象从而达到简化代码逻辑、减少中间变量的功效。Kotlin 标准库中共有 5 个范围函数 let, run, with, apply, also,不同的情境使用不同的函数可以减少很多体力活,不过对于我等英语水平不高的渣渣来说,仅从单词语义来看完全不知道怎么区分它们五个。如果实在分不开就不用管了它们了,直接丢掉,用最原始的 kotlin 语法照样可以把功能写出来。我之前就是这么干的,每次看完它们的定义就知道怎么用了,过一段时间不写 kotlin 又忘它们都是干啥的了,但是看许多开源代码都大量使用范围函数,所以就想写篇博客巩固一下。

2 如何区别

这五个范围函数在作法上十分相似,要想区分它们主要得从下面两个方面入手

  1. 函数内引用目标对象的方式
  2. 函数返回值

可以通过下面代码,观察 let 与 apply 在这两特性上的表现

@Test
fun callScopeFunctions_referenceAndReturnValue() {
   
    val personBob = Person(18, "bob", "China").let {
   
        // it 代表 personBob 对象
        it.name = "Bob"
        println(it)
        it // 在 block 最后写一个值代表此 block 的返回值
    }
    assertEquals(personBob.name, "Bob")

    val personAlice = Person(17, "alice", "USB").apply {
   
        // 可以在此 block 中直接访问 person 成员属性
        name = "Alice"
        print(this)
    }
    assertEquals(personAlice.name, "Alice")
}

// Person 定义
class Person(
        var age: Int,
        var name: String?,
        var address: String?
) {
   
    override fun toString(): String {
   
        return "I'm $name, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值