【问题标题】:Simplifying the statement [closed]简化语句[关闭]
【发布时间】:2018-12-01 22:05:12
【问题描述】:

任何人都可以帮助或建议简化以下条件:

if (null == parentInstruction.getQuantity() || 
       (null != parentInstruction.getQuantity() && 
           (
           (parentInstruction.getQuantity().compareTo(BigDecimal.ZERO) == 0 && !canSkipTransTypeCds(parentInstruction)) || 
           (parentInstruction.getQuantity().compareTo(BigDecimal.ZERO) != 0)
           )
       )
   )  {
   return true;
}

【问题讨论】:

  • 这个条件有什么作用?

标签: java if-statement boolean


【解决方案1】:

虽然我通常喜欢单个 if 语句,但如果代码变得不可读,最好将其拆分。

if(parentInstruction.getQuantity() == null)
  return true;
if(parentInstruction.getQuantity().compareTo(BigDecimal.ZERO) != 0)
  return true;
if(!canSkipTransTypeCds(parentInstruction))
  return true;

在第一个 if 语句之后parentInstruction.getQuantity() 永远null,否则它已经返回,所以不需要检查!= null

在第二个 if 语句之后 parentInstruction.getQuantity() 将始终0 ,否则它已经返回,因此无需检查 == 0

†:除非调用 .getQuantity() 当然同时更改值,但由于它是一个 getter,我们假设它永远不会更改返回值..

【讨论】:

    【解决方案2】:

    如果你真的想要一个单线,它归结为:

    if (!BigDecimal.ZERO.equals(parentInstruction.getQuantity()) || !canSkipTransTypeCds(parentInstruction)) 
      return true;

    我个人建议凯文的方法。

    【讨论】:

    • 我想过添加如何将.compareTo(BigDecimal.ZERO) == 0 也简化为.equals(BigDecimal.ZERO),但并不认为这是必要的。但是使用BigDecimal.ZERO.equals(...) 来防止潜在的NPE 是聪明的;使代码更简单,仍然是一次检查,所以我要 +1。
    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2016-06-07
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多