janlay’s blog

悠悠人生路,翩翩少年情

使用空列表,避免返回null

当期望输出列表而列表没有数据时,使用 null 还是 empty list? 这是让很多程序员迷惑的问题。当你有很多选择的时候,通常只有一种是最合适的(当然很多时候这句话前面要加上一个「在特定条件下」的定语)。针对输出/返回空还是空列表的问题,很多人多年程序设计经验表明,应该总是使用空列表

我随手搜了一下网上的讨论:

或者更直接一点,看看自己熟悉的 Framework 是如何返回列表的,比如 jQuery 的 $(selector), iOS 的 subViews, PHP 的 array_keys()

所有这些,被抽象为一条经典法则,也是各种最佳实践的核心原则之一——伯斯塔尔法则:发送时要保守,接收时要开放

这条简短的法则只要一半就可以回答上面的问题。没有数据时如何表示返回的列表?请参考前半句。这里最保守的做法是输出接收方期待的类型,并且尽量让接收方不因收到你提供的数据而失败。此时,返回空列表是最保守最理想的选择。

作为接收方,后半句箴言揭示了客户端应该自行 handle 非预期的数据。接收方必须以开放的心态去处理收到的各种数据,不管它是不是符合期望的。事实上,接收方保持这样的习惯可以获得更好的安全性(恶意的输入也要纳入考虑范围)、灵活性(可以接收多样化的输入,符合不同的「预期」)和完整性(考虑周全的实现)。

Comments