视频先行
下面是视频内容的脚本文案原稿分享。
开场
大家好,我是扔物线朱凯。
今天咱说说 Kotlin 的 implicit receiver。这是一个我们写 Kotlin 经常会用的东西,虽然你可能都没听过这个词,但你一定用过它。Kotlin 的很多高级功能,都利用到了这个概念——比如协程,协程是重度依赖它的,非常重。所以,弄明白它是个什么、怎么用、怎么去发挥它最大的价值,对我们的能力提升是非常有帮助的。
定义:其实就是 this
我们从它的定义说起。它的名字 implicit receiver,直接翻译到中文的话,叫隐式的接收器或者说接收者。啥叫「接收」啊?所谓的接收,其实指的就是接收调用,或者说接受调用。接受函数的调用啊,接受属性的访问啊。比如这个 user.name
:
user.name
左边的 user
就是它的 receiver。谁的 receiver?对于 name
的访问的 receiver。
而 implicit receiver,隐式的 receiver,指的就是不用写也自动存在的 receiver。也就是如果我把这个 user.
给删了,它依然能取到某个 User
对象的 name
:
name
那么这个隐式地被应用的 User
对象,就是对这个 name
的访问的 implicit receiver,隐式的 receiver。
这就是 implicit receiver 的定义。
不过,咱把脑子转个弯想一下,这其实就是啥?就是 this
呗?对吧?
所谓的 implicit receiver,其实就是指的这个 this
。
但 Java 里却没有隐式 receiver 这个概念,这是在 Kotlin 才增加了的概念。为啥呢?因为 Java 里的 this
很简单,就叫 this
就行了,不需要额外的专用名字;而 Kotlin 对它进行了一些关键的拓展,在拓展的同时,为了方便描述和沟通,就也给它起了专属的名字:implicit receiver。
那么它做了什么关键拓展呢?咱来从它的基本特性说起。
嵌套的 implicit receiver
this
,或者说隐式的 receiver,是可以嵌套的,比如在 Java 里我们可以这么写: