【问题标题】:More simple logic condition to check non-empty requirements更简单的逻辑条件来检查非空需求
【发布时间】:2011-11-15 14:22:47
【问题描述】:

我有一些简单的逻辑来检查该字段是否有效:

private boolean isValidIfRequired(Object value) {
    return
        (required && !isEmpty(value)) || !required;
}

它告诉该字段是有效的,如果它是必需的,不为空或不需要。

我不喜欢这个要求 || !必填部分。只是需要的东西会更好。 如何简化此方法以使其更具可读性和简单性?

【问题讨论】:

  • !required 有什么问题?它是完全可读的。但是,我可能会翻转表达式以首先使用 !required,因此当您大声朗读它时它更符合语法:“如果不需要,或者如果需要且不为空”。

标签: java refactoring logic boolean


【解决方案1】:

怎么样:

private boolean isValidIfRequired(Object value) {
    return !required || !isEmpty(value);
}

或者(感谢@Peter Lawrey)

private boolean isValidIfRequired(Object value) {
    return !(required && isEmpty(value));
}

在任何一种情况下,如果requiredfalse,则||&& 表达式将永远不会被调用short-circuitisEmpty。如果requiredtrue,则将评估||&& 的后半部分,调用isEmpty 并返回该调用的(反转)结果。

【讨论】:

  • 是的,我自己也一样。
  • 它的含义是:值不需要或不为空(如果仍然需要)
  • Peter:是的,这也很好用(@Vladimir,Peter 的版本也会短路)。两者都很好,这取决于您对条件的看法。
【解决方案2】:

isValidIfRequired() 的预期返回是返回 true。

所以例外情况必须放在开头作为监护条款:

private boolean isValidIfRequired(Object value) {

  if (required && empty(value))   //guardian clausule
      return false;

  return true;
}

对我来说,上面的代码比一起使用包含 AND 或和否定的表达式更易于阅读

【讨论】:

  • 我认为最好先排除特殊情况。但在这种特殊情况下,我会选择简短的代码,因为它也很好读。
猜你喜欢
  • 1970-01-01
  • 2012-03-29
  • 2021-01-30
  • 2013-09-15
  • 1970-01-01
  • 2014-07-08
  • 2021-11-10
  • 1970-01-01
  • 2014-11-28
相关资源
最近更新 更多