java中的多个return语句

时间:2017-12-01 11:11:49

标签: java

git mergetool

OOPs建议多个return语句是个坏主意。但是,如果我使用多个嵌套,那么它看起来非常复杂。 请建议使用嵌套条件

的最佳方法是什么

3 个答案:

答案 0 :(得分:5)

多个return语句本身并不好或坏 早期的返回和失败快速原则并不是编码的好方法,但它们依赖于多个return语句 一件事情很重要:一致性和代码可读性。

你的第二种方式是使用"提前返回"模式:

if (false) { // If condition is false
    return;
}

if (false) { // If condition is false
    return;
}

if (false) { // If condition is false
    return;
}

if (false) { // If condition is false
   return;
}

现在没有什么能阻止您通过删除重复来改进此代码:  if (...) returns ...;
滥用这些内容确实可以完成,因为过于噪音和分散的规则会产生一个不太可读的代码。

你的例子实在太抽象,无法提供具体的答案 因此,假设您的多个条件语句依赖于要评估的特定类的对象。

在这种情况下,您可以将条件语句存储在List中并对其进行迭代以应用每个规则。只要一个无效,就退出。

List<Predicate<MyObject>> predicates = Arrays.asList(MyObject::isValid, 
                                                    (m)-> m.getColor()==BLUE);

现在应用规则:

MyObject myObj = ...;
for (Predicate<MyObject> predicate : predicates) {
    if (!predicate.test(myObj)) {
      return false;
    }
}

答案 1 :(得分:2)

明白没有任何规则是一成不变的。 (软件)工程总是关于平衡不同的要求/规则。

在您的情况下:选项2,使用多个返回语句明确更容易理解为人类读者。

从这个意义上说:为此而努力。由于此解决方案在 single layer of abstraction 原则方面也有更好的效果!

但我同意评论 - if / else检查的冗长序列通常是设计不足的症状。一个人不需要完全放弃if(参见here) - 但假设您主要关注的是提高当前代码的质量,那么您应该花时间研究这个问题为什么在该方法中有如此多的if语句

答案 2 :(得分:0)

另一种选择:

if (condition || condition || condition)
    return;

if (condition && condition && condition) {
    statement's
}

显然,每种情况都可能是独立的。它只取决于条件,究竟是做了什么,......以及某种方式也取决于你想要“表达”的内容。