快速上手 Kotlin 开发
张涛
“开源实验室”博主,资深 Android 开发工程师
23083 人已学习
新⼈⾸单¥59
课程目录
已完结/共 50 讲
第四章 :团队协作篇 (3讲)
快速上手 Kotlin 开发
登录|注册
留言
11
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 08 | 函数的参数是函数 : 高阶函数的注意事项
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 讲给你的 Kotlin 快速上手课程
02 | Kotlin 最基础语法
03 | Kotlin 与 Java 完全兼容,就可以随便调用了吗?
04 | 新手使用 Kotlin 常碰到的问题
05 | 函数也能嵌套?这个特性要注意
06 | 用扩展函数简化代码调用
07 | DSL的基础 : Lambda闭包的语法
08 | 函数的参数是函数 : 高阶函数的注意事项
09 | 创建对象的关键 : Kotlin的构造函数
10 | 伴生对象 : Kotlin 特有的单例对象
11 | by关键字的使用
12 | Kotlin 独有的特殊类
13 | 解构 : 特殊的数据拆箱方式
14 | Kotlin 的循环语法
15 | Kotlin海量的集合操作符
16 | 作用域函数 : 你会爱上的自带函数
17 | 运算符与中缀 : 定义你的专有运算符
18 | 神奇的符号 : Kotlin 的反引号
19 | DSL 是什么,原来早就用过了
20 | 构建 DSL 的常用方式
21 | 定义自己的 DSL
22 | 理解 Kotlin 中的常量与只读
23 | Kotlin 的空安全是如何实现的
24 | Kotlin 内联 : noinline与crossinline
25 | Kotlin 的真泛型与实现方式
26 | 协程 : 提升性能的利器
27 | 在Kotlin 中使用协程
28 | 协程的启动参数
29 | 协程的语法糖
30 | suspend : 知其然知其所以然
31 | 协程的内部实现原理
32 | 动手设计Kotlin 协程的yield
33 | 协程通信:Channel的使用
34 | 小结 : 动手设计Channel版的EventBus
35 | NIO 与 BIO
36 | Kotlinx-io 的对象缓存池
37 | Google 推出 KTX 的目的
38 | KTX 的实现
39 | KTX 小结
40 | 在团队中使用 Kotlin
41 | 用 Kotlin 改写现有工程
42 | 滥用特性的后果:没人懂的代码
43 | Kotlin 服务端开发框架
44 | Http Servlet 创建 Kotlin 版 Web 应用
45 | Spring Boot 创建 RESTful Web 服务
46 | Kotlin 开发 Web 前端
47 | Kotlin Native 开发
48 | 创建 Kotlin Native 基础库
49 | 如何用 Kotlin 实现 Android MVP
50 | Android MVP 的 Kotlin 代码&结课测试
本节摘要

源代码及 PDF 课件地址:

https://gitee.com/geektime-geekbang/KotlinPrimer

登录 后留言

全部留言(11)

  • 最新
  • 精选
null
可以简单理解 Unit 为 java 的 void 么,老师

作者回复: java有个Void类不知道你清楚不,其实就可以可以将Unit理解为kotlin的Void类

2018-07-14
3
bxtyfufff
runnable.run()执行执行方法体 runable::run 引用方法体,不执行。 作为参数时,第一个写法会先执行,将最终的返回值作为参数(runable的返回值为unit)

作者回复: 对的有括号就是调用了方法

2020-03-28
1
蚂蚁内推+v
fun onlyIf(isDebug : Boolean , block:() -> Unit) { if (isDebug){ block() } } 和 fun onlyIf(isDebug : Boolean , block:() -> Unit) { if (isDebug){ block // 区别点 } } 张老师 这两个啥区别方便指导下吗?上面那个是调用,下面这个为啥编译器不报错方便解释下吗

作者回复: 下面那个相当于你就写了个变量名,但这个变量没有任何意义。

2018-12-15
1
蚂蚁内推+v
var runnable = { println("demo up ") } 和 var runnable2 = Runnable { println("runable up ") } 有啥区别 ,方便老师稍微指导下吗

作者回复: 上面是lambda对象,下面是runnable对象

2018-12-15
1
wendraw
完全没听懂,老师你能不能讲详细点,高阶函数一笔带过,比如调用高阶函数时,传入lambda表达式写在外面,真的不太好理解,总觉的很别扭,老师能不能解释一下kotlin为什么要这样设计?

作者回复: 高阶函数是kotlin非常核心的知识点,第一篇快速上手中,我们需要知道高阶函数的语法知识,如何声明,如何调用,能看懂别人代码。在后面讲DSL时候,我们还会重点讲kotlin的lambda与运算符重载知识。 在这里也教其他没有函数式编程经验的同学一个小技巧,在看kotlin的lambda时,在脑海里默念一下,这是一个接口对象。把lambda作为参数传入到函数中就跟平时写的回调是一样的。

2018-07-11
1
Fct
能不能用之前说的扩展函数 去定义一个23个参数的函数Function23,然后去解决那个问题?

作者回复: 不能,扩展函数不是真实的函数,并不能往指定包里面加,除非显示指定包名跟sdk的一致

2020-04-03
芋头
老师,定义一个 Runnable 可以这样 var runnable2 = Runnable { println("runable up ") } 那定义一个Callable<V>该如何定义呢

作者回复: val callable = Callable<Int> {...}

2019-01-30
OzoraTsubasa
练习一的选择题 按我的猜想应该是报错的,因为之前视频说过参数只能支持22个,现在为什么这个是23个也OK那

作者回复: 因为可以手动创建一个名叫Function23的接口

2018-11-12
面向加薪学习
fun only(isDebug: Boolean, block2: (a: Int, b: Int) -> Int): Int { if (isDebug) { return block2(3, 5) } return 0 } 调用 val result = only(true, { a, b -> a + b }) println("result--" + result) 老师这个是我定义和调用的高阶函数,为什么定义的时候就要block2写固定值,然后外面传入{a,b->a+b} ,参数不是应该从外面传入吗?请教老师这是为什么?

作者回复: (a:Int, b:Int)->Int 这是一个类型,跟你经常写的String、Int是同类型的。传入的时候{a,b-> a+b} 这一整段是一个对象

2018-08-08
遥远的救世主
练习题一按照Lambda最多有22个参数所说,应该需要自己在java中定义Function23,但在最新的Kotlin 1.3版本可以正常运行,应该像前面一位朋友所说的在新版本中没有了这个限制。
2019-05-24
8
收起评论