[英]Should I avoid using “!” in if statement in Java?
我们团队的Java编码指南说:
避免使用“!” 在if语句中尽可能多。
我问其他同事,但没有人给我清楚的想法,因为该指南是很久以前创建的,作者可能已离开我们公司。
你有什么主意吗?
根据提供的信息,这需要一些推测。 一个可能的原因是,意图本身不是if语句,而是if-else语句。 在这种情况下,我可以看到你可能会说你应该反转案件,以便你没有额外的否定操作。 代替
if (! boolVar) {
// Something
} else {
// Something else
}
你可能更喜欢
if (boolVar) {
// Something else
} else {
// Something
}
这是否值得,可能更多的是品味和标准化问题。
该规则很可能是罗伯特·马丁的清洁法典第302页的改编:
负面消息比正面消息更难理解。 因此,在可能的情况下,条件应表示为正数。 例如:
if(buffer.shouldCompact())
比较好
if(!buffer.shouldNotCompact())
例如,假设您正在创建一个验证程序,该验证程序需要两个错误才能使实体有效:
当然,我们的想法是为此编写两种方法:
boolean isCreatedWithinLastTwelveHours(BankAccount account)
boolean hasMoreThanTotalSumCap(BankAccount account)
...然后,您将其调用为:
boolean newAccount = isCreatedWithinTheLastTwelveHours(account);
boolean highEndAccount = hasMoreThanTotalSumCap(account);
if(!newAccount && !highEndAccount) { // ... other logic
// The more astute would use DeMorgan's law in an effort to make this more readable
if(!(newAccount || highEndAccount)) { // other logic
嗯......那岂不是更好,如果你只是说他们不是代替呢?
boolean isNotCreatedWithinLastTwelveHours(BankAccount account)
boolean hasLessThanTotalSumCap(BankAccount account)
这使得表达更加简洁:
if(notNewAccount && notHighEndAccount) { // .. carry on!
当然 ”!” 可以在你喜欢的时候使用。 java中没有“除非”,在某些情况下你没有其他选择。
看起来还是另一个无用的规则。 一般来说,在这种情况下没有绝对术语,如果你在if-else子句中,那么可能最好写一下
if(myCondition) {
doThis()
} else {
doSomethingElse()
}
代替
if(!myCondition) {
doSomethingElse()
} else {
doThis()
}
但是,在某些情况下,实际上使用否定运算符是非常好的,特别是如果没有提供else子句,例如
if (!tokenDoesCompute()) {
throw InvalidTockenException("Whatever")
}
实际上在这种情况下,使用“!” 对我来说有点意义。
最后,如果没有人可以真正解释为什么规则存在,也许是时候删除它,我能找到它的唯一好处是提供有关代码风格的一致性。
好的,我回答了我自己的问题。 正如其他人所说,也许这是为了可读性而写的。
在“可读代码的艺术” (第72页)中说:
首先处理正面情况而不是负面情况 - 例如
if(debug)
而不是if(!debug)
我发现下面的帖子:
bool func(String name) { if ( (name != null) && (name.equals("true") ) { //... } else { //... } }
bool func(String name) { if ( "true".equals(name) ) { //... } else { //... } }
当然你可以使用否定运算符!
随时随地。
但是,如果您遇到必须在if
和else
块中编写某些操作的情况,则以下内容更具可读性:
if(status){
//do something
}
else{
//do something else
}
比
if(!status){
//do something
}
else{
//do something else
}
但是如果你有这样的情况你只需要根据一个条件执行某些操作,即如果你只有一个if
块而没有else
块,那么使用起来相当合理!
if
我没有看到其他人提出过这个问题,这可能是因为他们和我一样讨厌它,但我是为了完整而展示它。
// Using not operator (preferred)
if (! someTest) { ... }
// Using compact not operator (kind of hides it)
if (!someTest) { ... }
// Comparing to false (ok, explicitly states what you want)
if (someTest == false) { ... }
// Comparing to true (a bit obscure)
if (someTest != true) { ... }
他们都这样做,但请继续使用!
,请确保在其后添加空格,以便更容易看到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.