朱涛 · Kotlin 编程第一课
朱涛
Google 认证的 Kotlin、Android 开发者专家,博客“Kotlin Jetpack 实战”作者
6717 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
朱涛 · Kotlin 编程第一课
15
15
1.0x
00:00/00:00
登录|注册

加餐二 | 什么是“表达式思维”?

你好,我是朱涛。
开篇词当中,我曾经说过,学好 Kotlin 的关键在于思维的转变。在上一次加餐课程当中,我给你介绍了 Kotlin 的函数式编程思想,相信你对 Kotlin 的“函数思维”已经有了一定的体会。那么今天这节课,我们就来聊聊 Kotlin 的表达式思维
所谓编程思维,其实是一种非常抽象的概念,很多时候是只可意会不可言传的。不过,从某种程度上看,学习编程思维,比学习编程语法还要重要。因为编程思维决定着我们的代码整体的架构与风格,而具体的某个语法反而没那么大的影响力。当然,如果对 Kotlin 的语法没有一个全面的认识,编程思维也只会是空中楼阁。
所以,准确地来说,掌握 Kotlin 的编程思维,是在掌握了 Kotlin 语法基础上的一次升华。这就好比是,我们学会了基础的汉字以后开始写作文一样。学了汉字以后,如果不懂得写作的技巧,是写不出优美的文章的。同理,如果学了 Kotlin 语法,却没有掌握它的编程思维,也是写不出优雅的 Kotlin 代码的。
好,那么接下来,我们就来看看 Kotlin 的表达式思维。

表达式思维

在正式开始学习表达式思维之前,我们先来看一段简单的 Kotlin 代码。
var i = 0
if (data != null) {
i = data
}
var j = 0
if (data != null) {
j = data
} else {
j = getDefault()
println(j)
}
var k = 0
if (data != null) {
k = data
} else {
throw NullPointerException()
}
var x = 0
when (data) {
is Int -> x = data
else -> x = 0
}
var y = 0
try {
y = "Kotlin".toInt()
} catch (e: NumberFormatException) {
println(e)
y = 0
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kotlin编程语言的表达式思维和类型系统是本文的重点。文章通过对比Java和Kotlin的代码示例,展示了Kotlin表达式思维的简洁性和灵活性,以及Kotlin中的特殊类型Unit和Nothing的用法。Unit类型在Kotlin中不同于Java的Void或void,而是一个类,同时也是一个单例对象,在函数类型和泛型编程中有着灵活的应用。而Nothing则是Kotlin所有类型的子类型,在函数式编程中被称为底类型,它的存在有助于编译器进行代码流程的推断。此外,文章还介绍了Unit?和Nothing?这两个可空类型的特点,以及它们在函数返回值和参数类型中的应用。通过深入讨论Kotlin表达式思维和类型系统,本文为读者提供了全面了解Kotlin编程语言特点的文章。文章内容涵盖了Kotlin编程语言的特殊类型和表达式思维,对于想要深入了解Kotlin编程语言的读者具有重要参考价值。文章通过对Kotlin类型系统中的Unit和Nothing进行深入解析,展示了Kotlin语言中表达式思维的重要性和灵活性。同时,通过对Kotlin中特殊类型的介绍,读者可以更好地理解Kotlin编程语言的独特之处,为他们在实际编程中的应用提供了有力的支持。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《朱涛 · Kotlin 编程第一课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • Paul Shan
    函数式编程要求函数是一等公民,如果某些函数不能用类型描述(例如Java中的返回为void 函数),后续的赋值,参数传递就很困难,成为一等公民就成为泡影!Kotlin中Nothing,Unit 和 Any?让所有函数的返回都有固定类型,为函数式编程奠定基础。函数的返回值必然来自于某个表达式,这也要求表达式都有固定类型。表达式是函数编程的组成模块,是串联各个函数的纽带,也是决定函数返回值的重要一环。

    作者回复: 很棒的答案,推荐给大家!

    2022-03-20
    22
  • 20220106
    学了汉字以后,如果不懂得写作的技巧,是写不出优美的文章的。 ——理解作者想表达什么,但是写作技巧和文章优美与否不直接挂钩,除非把模板的文字当作优美。

    作者回复: 嗯,确实表达的不够到位。我本意是想表达:鲁迅、莫言之类的文学作家,他们和我们都一样只是学了汉字,那他们为什么可以写出那么好的文章呢?他们和普通人的差异肯定不只是“写作技巧”那么简单,但如果我将其称为“写作思维”呢好像又有点奇怪。 也许“文学素养”更合适吧。

    2022-01-26
    2
    5
  • better
    函数式,关注的是计算的输入输出,而表达式可以有输出,2者可以结合起来;也就类似: 函数式(函数式(表达式)表达式),某些情况,反过来也可以 表达式=函数式(表达式) 实现相互补充,不知道这样理解是否 ok

    作者回复: “相互补充”这四个字总结很到位,赞!

    2022-01-26
    4
  • PoPlus
    这节很受用,原来 Unit 类是 Kotlin 实现「表达式思维」的重要支撑。之前一直觉得 Unit 只不过是 void 的 Kotlin 版本罢了,没想那么多。

    作者回复: 是的,理解Unit并不难,难的是理解它背后的设计意图。

    2022-01-28
    3
  • Paul Shan
    Kotlin能转成表达式语句基本都做了表达式版本,但是赋值语句照理说应该很容易转成表达式的,在某些情况也能起到简化的作用,例如把赋值表达式传给if,在if里面使用赋值创建的变量,但是Kotlin没有做,请问老师,这背后有什么考量吗?多谢

    作者回复: 就我所知,Kotlin 官方非常推崇简洁语法,不希望引入过多复杂的语法进来。也许是这个原因吧。

    2022-03-20
    1
  • Barry
    我理解kotlin建立的类型系统,才能实现表达式编程方式,进而可以实现函数式编程,确实提升了编程效率

    作者回复: 很棒!

    2022-03-02
    1
  • Renext
    Nothing泛型星投影的时候的应用,后面会有讲解吗

    作者回复: 这个目前没有计划,这个问题我会先记下来,看看后续实战课中能不能应用进来,但不敢保证哈。 其实,这一点Kotlin官方文档已经介绍的比较清楚了,只要你理解了Nothing,剩下的应该就不难的。 参考这里:https://kotlinlang.org/docs/generics.html#star-projections

    2022-02-08
    1
  • dadada
    能不能快点更新呀?主要为的就是协程及后面的东西,等了这么久了协程还没有更新。。

    作者回复: 放心,协程部分肯定是跑不掉的哈,先容我把基础部分讲明白,照顾一下基础不好的同学。

    2022-01-26
    4
    1
  • vox
    这一章很棒

    作者回复: 加油~

    2022-04-25
  • Shanks-王冲
    涛哥,我分享一个疑惑:Any与Any?描述成「虽是子类,但没有继承关系」,可以描述成Any是Any?的子类型(sub type)嘛?当然,这很容易让人联想到泛型;不过「子类型」与「继承」,在我学习Java时,有时候让人觉得很微妙:)

    作者回复: 可以这么理解的,毕竟“子类”与“继承”并非等价。

    2022-03-31
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部