避免代码中的意外情况:空值处理与空对象模式
1. 避免意外情况
在软件开发中,意外情况可能会导致严重的后果。例如,一个团队在为公司的年度股东报告编译统计数据时,如果复用了 getMeanAge() 函数,而该函数返回的用户平均年龄值有误,可能会对公司股价产生重大影响,并引发严重的法律后果。此外,单元测试可能无法捕捉到这类问题,因为 getMeanAge() 函数的作者可能错误地认为用户年龄总是可用的,从而不会编写用户年龄缺失的单元测试。
1.1 解决方案:返回 null、可选值或错误
函数返回魔术值(magic value)可能会给调用者带来困扰,因为他们需要了解函数契约的细则。为了避免这种情况,当值可能缺失时,最好将其作为代码契约中明显的一部分。一种简单的方法是,如果语言支持空安全(null-safety),则返回可空类型;如果不支持,则返回可选值(optional value)。
以下是修改后的 User 类,其中 getAge() 函数在未提供值时返回 null :
class User {
private final Int? age;
...
Int? getAge() {
return age;
}
}
修改后的 getMeanAge() 函数如下:
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



