String.equals()参数排序

hmj*_*mjd 25 java

我最近在最近的回答中收到了使用以下内容的downvote :

String word = ...;
if ("s".equals(word) || "y".equals(word)
Run Code Online (Sandbox Code Playgroud)

由于使用"yoda条件"而给出了downvote.我要求进一步解释,但没有提供.我更喜欢这种风格以避免可能NullPointerException.

这是一种糟糕的编码风格吗?如果是这样,为什么?

Tom*_*ine 34

Bill Pugh在Devoxx 2011上提出了这个问题.绝大多数人都选择了这个问题"xyz".equals(str).比尔,我现在更喜欢str.equals("xyz").

我们在合理可能的早期发现错误是Java传统的基础.NPE非常普遍.我们希望尽快将这些空值路由出去.

如果您期望引用可能null,那么我并不特别反对向后表示法.很明显,更容易理解可能null有一个单独的null检查,但应该很好地理解相反的顺序,并充分区分代码与null禁止的正常情况.

在安全性方面,一些容忍零容忍的漏洞就是漏洞.


Den*_*men 10

Yoda条件(即在比较中将变量放在常量之前)可以被认为是不好的做法,因为它使得代码行不易理解.但是在这种特殊情况下,我会说使用Yoda条件会使代码更容易理解,因为您不必在它前面添加额外的空值检查.


小智 8

请访问以下链接,了解尤达条件|符号的含义

它不是一种"不良编码风格"的不同编码方式.

Yoda可以用来跟踪某些语言的拼写错误,我相信-1不应该是诚实的,但这是我个人的看法.

但是Yoda可能很糟糕,正如这篇冗长但非常有趣的文章所解释的那样.

当天结束时,有支持者支持并反对这种表示法.