我实际上正在使用 C# - 但是 Nulls 的问题出现在当地开发人员组(英国切斯特开发人员)社交网站上,关于 null 的问题
对象 Person 具有字符串类型的属性,例如名称如果名称未知,则在 C# 中名称为空
埃菲尔有没有比C#更好的方法(如果x为空...)来处理这个常见的动态空白?
Eiffel 允许void
值(在 C# 中null
)。但是,它确保永远不会调用无效目标(即没有NullReferenceException
)。这在编译时通过依赖于用attached
/detachable
类型概念增强的类型系统以及一组特殊的 void-safety 规则来确保这一点,这些规则保证附加类型的任何表达式始终在运行时附加到对象(即永远不会null
)。
在您的示例中,类声明将如下所示
class PERSON ... feature
name: detachable STRING
end
然后在代码中它可以用作
p: PERSON
a: STRING
d: detachable STRING
...
d := p.name -- OK
a := p.name -- This is not allowed, because `a' is of an attached type.
if attached p.name as q then
a := q -- OK
... -- Both `q' and `a' are equal to `p.name' and are attached.
else
... -- The name is `void', do something else.
end
当某些值可能存在或不存在时,可能有一个OPTION
类型并依赖它,但是没有值自然地用void
表示,这就是它的设计目的,所以通常几乎不需要特殊类型。