埃菲尔是否避免所有空值



我实际上正在使用 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表示,这就是它的设计目的,所以通常几乎不需要特殊类型。

最新更新