01
20
04
02
函数也是一种类型,这该怎么理解?
1.6k
等18人参与

函数最常见的作用就是拆解复杂的逻辑,因此实现需求其实就是将一个复杂的问题拆解成一系列包含相对独立功能的函数并将其组织起来的过程 —— 这就是我们通常对程序当中的函数的认识。实际上,我们最早接触函数并不是在程序设计中,而是数学当中,数学当中的函数就是将一个集合映射到另一个集合的过程,这两个集合分别对应于函数的输入和输出。因此在数学当中我们学过一次函数、二次函数、多元函数等等这样的概念,可见函数之间还是有诸多不同的。

Kotlin 的函数是一等公民,因为它有类型,这也是广大 Kotlin 初学者遇到的第一个比较难以理解的概念了。

请谈一谈你对函数类型、函数的 Receiver 等概念的认识,这其中也可以对比 Java 8 当中的 SAM 类型与 Kotlin 函数类型带区别。

我的作业
去发布

登录后即可发布作业,立即

全部作业

函数类型:
函数在kotlin中作为一等公民的理解就是,
函数可以作为定义变量的类型,可以作为形参的类型,可以作为返回值参数的类型,也就是函数类型,和类一样的用法。

函数的Receiver,简单一点通过代码理解就是

data class Coder(var name: String, var age: Int)
class Foo{
    val oo:String = ""
    var xx:()->Unit={
        var a = this.oo
        var b = this@Foo.oo
    }
    var yy:Coder.()->Coder={
        var a = this
        var b = this@Foo.oo
        a.name
        a.age
        this
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
代码块
复制 预览
复制成功!
代码块
复制 预览
复制成功!

再进一步的可以通过apply和also代码

val a = Coder("x",18).apply {
    name
}
val b = Coder("x",18).also {
    it.name
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
代码块
复制 预览
复制成功!
代码块
复制 预览
复制成功!
public inline fun <T> T.apply(block: T.() -> Unit): T {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    block()
    return this
}
public inline fun <T> T.also(block: (T) -> Unit): T {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    block(this)
    return this
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
代码块
复制 预览
复制成功!
代码块
复制 预览
复制成功!

源码中唯一的不同就是带Receiver的可以直接block();而不带Receiver的需要block(this),这个this就是T(Coder(“x”,18))

0
评论
提交于  2024-06-09 18:53:04

登录后即可查看更多作业,立即

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号