【发布时间】:2015-02-24 20:02:08
【问题描述】:
我有一个 API,其中有如下属性访问器:
int foo()
有时属性可以为“null”。由于 int 不能为 null,因此使用额外的属性来检查 null。
bool hasFoo()
当人们调用 foo() 时会发生什么? foo() 的实现不会有未定义的行为,而是在内部检查 hasFoo() 和恐慌,这通常会终止线程或进程并显示错误消息。
花车让事情变得更有趣。此 API 中的浮点数有一个空值:NaN。所以对于
float bar()
当 hasBar() 返回 false 时,bar 将始终返回 NaN,这是非常明确的行为。事实上,大多数类型、字符串、日期等都有有效的“空”表示。 ints 和 bool 是奇数,其中 0 可以是有效值。
所以我的问题是,当 hasBar() 为 false 时 bar() 是否也应该恐慌以与 int 和 bool 保持一致?或者可能是整数和布尔值在它们为空时应该返回 0,并且只有通过调用 hasFoo() 才能分辨出真正的 0 和空的 0 之间的区别。什么行为不那么令人惊讶?为什么?
【问题讨论】:
标签: architecture language-agnostic