加餐四 | 什么是“空安全思维”?
朱涛
你好,我是朱涛。这节加餐,我们来聊聊空安全思维。
空(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
《朱涛 · Kotlin 编程第一课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- Paul Shan个人觉得Kotlin默认上界定为Any?不好,不符合Kotlin默认安全原则,默认上界应该定为Any,包含可空类型应该明确写。
作者回复: 确实挺坑的。
2022-03-2037 - A Lonely Cat总结:尽量 val 不可空 ?. ?.let
作者回复: 言简意赅
2022-02-096 - vox!!. 也可以用takeif的形式来替换吧
作者回复: 是的,感谢补充
2022-04-264 - Paul ShanAndroid开发中,在和Service交互的代码中尽量使用nullable类型,因为不能确定服务端返回的数据是否真有,但是要把这一层隔离好,真正的业务逻辑尽量使用non-nullable类型,保持代码的简洁。 请问老师,在测试代码中,能否使用!!?我会在很多测试场景下使用!!,在生产代码中,使用数据的时候会用?.let等方法处理掉,但是测试场景中,如果测试数据已经准备到位,会用!!保持代码的简洁,减少判断,请问这样的使用是否合理? Compose的preview情况下,也会遇到类似的问题,有些数据在生产情况下是不会显示UI,但是为了让preview显示,也会加!!,让编译系统以为数据已经准备好,请问这样的使用是否合理?
作者回复: 测试环境使用非空断言是可以理解的。
2022-03-203 - 神秘嘉Binkotlin定义了不可空的入参的方法,java传入了平台类型,这种除了review外一般怎么防范?出现过几次npe了🙈
作者回复: 使用静态代码检测方案。不过,目前没有现成的开源方案,这需要自己来实现对应的检测规则。
2022-02-102 - 24隋心所欲准则二:“绝不适用非空断言”,感觉有点绝对了。非空断言是有合适的使用场景的,只是不滥用就行。如果绝对不使用的话,有时候可能是掩盖bug了而不是解决bug2022-10-28归属地:河北1
收起评论