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

加餐四 | 什么是“空安全思维”?

你好,我是朱涛。这节加餐,我们来聊聊空安全思维。
空(null),是很多编程语言中都有的设计,不同的语言中名字也都不太一样,比如 Java 和 Kotlin 里叫 null,在 Swift 里叫做 nil,而 Objective-C 当中,根据情况的不同还细分了 NULL、nil、Nil 等等。
如果你有 Java 的经验,那你一定不会对 NullPointerException(NPE,代码中常见的逻辑错误)感到陌生。null 会引起 NPE,但是在很多场景下,你却不得不使用它。因为 null 用起来实在是太方便了。比如说,前面第 4 讲里,我提到的计算器程序当中的 calculate() 方法,它的返回值就是可为空的,当我们的输入不合法的时候,calculate() 就会返回 null。
一般来说,我们会习惯性地用 null 来解决以下这些场景的问题:
当变量还没初始化的时候,用 null 赋值;
当变量的值不合法的时候,用 null 赋值;
当变量的值计算错误的时候,用 null 赋值。
虽然这些场景,我们不借助 null 也可以漂亮地解决,但 null 其实才是最方便的解决方案。因为总的来说,null 代表了一切不正常的值。如果没有了 null,我们编程的时候将会面临很多困难。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kotlin编程中的空安全思维至关重要。本文强调了Kotlin的类型系统能够帮助开发者规避空指针异常,并提供了实用建议。文章首先介绍了在Java中避免空指针异常的常见手段,然后引入了Kotlin的空安全思维。在Kotlin与Java混合编程中,文章提出了警惕Kotlin以外的数据类型的准则,并给出了一些实践建议。此外,文章还详细介绍了在Kotlin编程中避免使用非空断言的几种方法,以及如何处理泛型可空性的问题。总的来说,本文强调了空安全思维在Kotlin编程中的重要性,并提供了一些实用建议,对于Kotlin开发者来说具有很高的参考价值。文章总结了Kotlin的空安全思维的四大准则,包括警惕Kotlin与外界的交互、绝不使用非空断言、尽可能使用非空类型以及明确泛型的可空性。这些准则为读者指明了方向,为后续学习打下基础。文章还提出了思考题,鼓励读者分享其他的准则,展现了对读者的互动性和思考性。

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

全部留言(6)

  • 最新
  • 精选
  • Paul Shan
    个人觉得Kotlin默认上界定为Any?不好,不符合Kotlin默认安全原则,默认上界应该定为Any,包含可空类型应该明确写。

    作者回复: 确实挺坑的。

    2022-03-20
    3
    7
  • A Lonely Cat
    总结:尽量 val 不可空 ?. ?.let

    作者回复: 言简意赅

    2022-02-09
    6
  • vox
    !!. 也可以用takeif的形式来替换吧

    作者回复: 是的,感谢补充

    2022-04-26
    4
  • Paul Shan
    Android开发中,在和Service交互的代码中尽量使用nullable类型,因为不能确定服务端返回的数据是否真有,但是要把这一层隔离好,真正的业务逻辑尽量使用non-nullable类型,保持代码的简洁。 请问老师,在测试代码中,能否使用!!?我会在很多测试场景下使用!!,在生产代码中,使用数据的时候会用?.let等方法处理掉,但是测试场景中,如果测试数据已经准备到位,会用!!保持代码的简洁,减少判断,请问这样的使用是否合理? Compose的preview情况下,也会遇到类似的问题,有些数据在生产情况下是不会显示UI,但是为了让preview显示,也会加!!,让编译系统以为数据已经准备好,请问这样的使用是否合理?

    作者回复: 测试环境使用非空断言是可以理解的。

    2022-03-20
    3
  • 神秘嘉Bin
    kotlin定义了不可空的入参的方法,java传入了平台类型,这种除了review外一般怎么防范?出现过几次npe了🙈

    作者回复: 使用静态代码检测方案。不过,目前没有现成的开源方案,这需要自己来实现对应的检测规则。

    2022-02-10
    2
  • 24隋心所欲
    准则二:“绝不适用非空断言”,感觉有点绝对了。非空断言是有合适的使用场景的,只是不滥用就行。如果绝对不使用的话,有时候可能是掩盖bug了而不是解决bug
    2022-10-28归属地:河北
    1
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部