【问题标题】:Coding standard for null checking [duplicate]空值检查的编码标准[重复]
【发布时间】:2010-10-29 07:13:58
【问题描述】:

可能的重复:
What's the comparison difference?
Null check in Java

大部分开发者都有写空检查的习惯,左手边是null.like,

if(null == someVariable)

这有什么帮助吗?在我看来,这会影响代码的可读性。

【问题讨论】:

  • 这叫做“尤达条件”! :D
  • 你的意思是,“尤达条件,它被称为。”
  • '大多数开发者'。真的吗?证据?
  • @EJP:是的,我根本不经常看到它。也许是他组织中的大多数开发人员。

标签: java coding-style


【解决方案1】:

不,它在 Java 中没有任何用途。

在 C 及其一些相关语言中,有时会使用它来避免犯此错误:

if (someVariable = null)

注意=而不是==,作者无意中将null分配给someVariable而不是检查null。但这会导致 Java 中的编译器错误。

即使在 C 语言中,任何现代编译器都可以选择将 if (someVariable = null) 视为警告(甚至是错误)。

在风格上,我同意你的观点——我不会说“如果你是 21 岁,我会为你端一杯饮料”(除非我已经喝了 杯,并且正在做我的尤达冒名顶替)。请注意,那是英语;据我所知,这在其他语言中非常有意义,在这种情况下,对于那些语言的使用者来说,这将是完全合理的风格。

【讨论】:

  • @TJCrowder,说它有no purpose whatsoever in java 会有点错误....如果someVariableBoolean,它不会引发编译错误...:)您需要将 Yoda 排除在外……但否则 java 会为您清理。 :)
  • @st0le:哇,我很惊讶地发现你是对的。我不知道(并且已经检查过)。谢谢!但我会反驳:不要那样测试布尔值,if (someVariable == true) 没有任何用途,只需使用if (someVariable)(当然还有!someVariable 而不是与false 比较)。 (事实上​​,你可以有一个无意的赋值支持使用这种风格。)我唯一一次将=!= 与布尔值一起使用是如果我比较两个变量(而不是与常量比较),并且构造在那里帮不了我。 :-)
  • @TJCrowder,当然,没有像样的Java程序员会真正使用它...我只是抛出一个异常,双关语;)
  • @st0le:是的,再次感谢。当我为它写了一个测试用例并且它通过了时,我感到非常惊讶。 :-)
【解决方案2】:

当 C 编译器在需要 == 时不会抱怨缺少 = 时,它曾经提供帮助:

// OOps forgot an equals, and got assignment
if (someVariable = null) 
{
}

任何现代 C#/Java/C++/C 编译器都应该发出警告(希望是错误)。

个人觉得

if (someVariable == null) 
{
}

比以null开头的可读性更强。

【讨论】:

  • (谈到 C 和 C++ 编译器):错误,而不是警告?
【解决方案3】:

在你的情况下,我认为这样做没有任何好处。但我更喜欢以下...

if("a string".equals(strVariable))
{
}

在这个..

if(strVariable != null && strVariable.equals("a string"))
{
}

【讨论】:

  • @T.J. Crowder - 是的,它在合同中定义。从您提供的链接中:“对于任何非空引用值 x,x.equals(null) 应该返回 false。”
  • @T.J. Crowder & @Cowan,是的,我回到了 JDK 1.1.1,它在合同中定义。 tns.lcs.mit.edu/manuals/java-1.1.1/api/…
  • @Cowan 和@Rosdi:我不敢相信这些年来我都错过了。谢谢。我已经删除了之前的评论。证明你永远不会停止学习。 Man 这些文档是否需要重新措辞,“对于任何非空 x”的所有不必要的重复都完全掩盖了其余点。可悲的是,这些年来我遇到了很多 equals 的违约实现。 :-(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2017-04-20
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多