1. 别再傻傻分不清:Kotlin作用域函数到底是个啥?
刚接触Kotlin那会儿,看到别人代码里一串串的let、apply、run,我头都大了。这都啥跟啥啊?感觉长得都差不多,为啥要用这么多种?后来项目做多了,踩过不少坑,也尝到了甜头,我才算真正搞明白。今天我就把自己这几年的实战经验掰开揉碎了讲给你听,保证你听完之后,再也不会用错。
简单来说,let、run、with、apply、also这五个家伙,在Kotlin里被统称为“作用域函数”。它们的核心作用就一句话:在一个对象的上下文中,执行一段代码块。这听起来有点抽象,我打个比方。你买了一台新电脑(对象),接下来你要做三件事:拆箱、插上电源、开机。这三件事(代码块)都是围绕这台电脑展开的。作用域函数就是帮你把这三件事“打包”在一起,并且用一种更优雅、更安全的方式去执行。
那它们到底解决了什么问题呢?我总结主要是三点:空安全、代码简洁和链式调用。在Java里,你要对一个可能为null的对象做一连串操作,得写一堆if (obj != null),代码又臭又长。在Kotlin里,一个?.let就搞定了。你想初始化一个对象并设置一堆属性,在Java里要么写一大段setter,要么搞个Builder模式。在Kotlin里,一个apply就能让初始化过程清晰得像在填表格。
不过,它们五个虽然目标一致,但各有各的小脾气和适用场景。选错了,代码会显得很别扭;用对了,那叫一个行云流水。它们的区别主要围绕两个关键点:第一,代码块里怎么引用这个对象?是it还是this?第二,函数的返回值是什么?是代码块的最后一行结果,还是对象本身? 记住这两点,是区分它们的关键。下面这张表可以帮你快速建立第一印象:
| 函数 | 对象引用方式 | 返回值 | 典型使用场景 |
|---|---|---|---|
| let | it |
代码块最后一行 | 空安全检查,对非空对象执行操作并转换结果 |
| run | this |
代码块最后一行 | 对象配置与计算,需要同时调用方法并返回结果 |
| with | this |
代码块最后一行 | 对非空对象进行一系列操作,无需返回对象本身 |
| apply | this |
对象本身 (this) |
对象初始化、配置(Builder风格) |
| also | it |
对象本身 (it) |
附加效果,如打印日志、验证数据 |
光看表

1621

被折叠的 条评论
为什么被折叠?



