首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eiffel是否避免所有空值?

Eiffel是否避免所有空值?
EN

Stack Overflow用户
提问于 2016-02-09 19:54:27
回答 1查看 325关注 0票数 2

我实际上使用的是C# -但是Nulls的问题出现在一个本地开发人员团体(Chester Devs,UK)的社交网站上,关于nulls的问题

对象Person有一个String类型的属性,比如Name。如果名称未知,则在C#中name为空

Eiffel有没有比C#更好的方法(如果x为null ...)来处理这种常见的动态空洞?

EN

回答 1

Stack Overflow用户

发布于 2016-02-09 20:51:22

Eiffel允许void值(C#中的null)。但是,它确保永远不会在空目标上进行调用(即,没有NullReferenceException)。这是在编译时通过依赖于类型的attached/detachable概念扩充的类型系统和一组特殊的空安全规则来确保的,这些规则保证附加类型的任何表达式总是在运行时附加到对象上(即永远不是null)。

在您的示例中,类声明将如下所示

代码语言:javascript
复制
class PERSON ... feature
   name: detachable STRING
end

然后,在代码中可以将其用作

代码语言:javascript
复制
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表示,这就是设计它的目的,因此通常不需要特殊类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35291437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档