首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我们应该总是在代码中写防御性空签吗?

我们应该总是在代码中写防御性空签吗?
EN

Software Engineering用户
提问于 2013-12-06 08:06:17
回答 1查看 3.9K关注 0票数 1

是否有任何不应该为null编写防御检查的场景?

我们应该在每次传递参数或从方法返回值时编写防御性代码或检查NULL吗?

这会给编译器带来额外的负担吗?

EN

回答 1

Software Engineering用户

发布于 2013-12-06 10:00:01

处理空指针的理想方法是,如果方法不能处理空指针,则通过契约禁止它们。这取决于支持程度如何的语言:

  • 在Java中,您可以对任何不允许为null的方法参数使用javax.validation.constraints.NotNull注释(或IDE(如IntelliJ和Eclipse)提供的类似注释)。不幸的是,这不是很容易携带。
  • 在C#中,您可以使用代码契约Contract.Requires( x != null );
  • 在C++中,您可以使用引用而不是指针(但一旦使用智能指针,就会倒霉)
  • 在Ada中,您可以使用not null access类型。
  • 一些较新的语言,如Rust,通过设计禁止空指针。

我通常采用契约方法,而不是在运行时检查空(如果可能的话)。它支持更早的错误发现。通常,基于合同的空检查除了编译器试图推断方法调用的参数在编译时是否会违反合同外,还会生成一个运行时检查。

认为你信任你库的调用者是个坏主意,因为你永远不知道这个库是否会在另一个环境中被重用。对调用者的信任总是会损害代码的可重用性。

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

https://softwareengineering.stackexchange.com/questions/220444

复制
相关文章

相似问题

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