private void test() {
// Nested if block
if (true) { // If condition is true
if (true) { // If condition is true
if (true) { // If condition is true
if (true) { // If condition is true
// statement
}
}
}
}
// Above block breaking in below way
// Breaking nested if in multiple with return statement
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;
}
}
Run Code Online (Sandbox Code Playgroud)
OOPs提出多个return语句不是一个好主意。但是如果我使用了多个嵌套的话,那么它看起来就很复杂了。请提出在条件下使用嵌套的最佳方法是什么
多个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;
}
Run Code Online (Sandbox Code Playgroud)
现在,没有什么可以通过删除重复来阻止您改进此代码:
if (...) returns ...;。
实际上,由于噪声和规则分散,滥用它们确实可能会产生难以阅读的代码。
您的示例确实过于抽象,无法提供具体答案。
因此,假设您的多个条件语句依赖于要评估的特定类的对象。
在这种情况下,您可以将条件语句存储在List中并对其进行迭代以应用每个规则。一旦无效,则退出。
List<Predicate<MyObject>> predicates = Arrays.asList(MyObject::isValid,
(m)-> m.getColor()==BLUE);
Run Code Online (Sandbox Code Playgroud)
现在应用规则:
MyObject myObj = ...;
for (Predicate<MyObject> predicate : predicates) {
if (!predicate.test(myObj)) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
明白没有什么规则是一成不变的。(软件)工程总是要平衡不同的需求/规则。
对于您的情况:选项 2,使用多个 return 语句显然对于人类读者来说更容易理解。
从这个意义上说:去做吧。因为这个解决方案在单层抽象原则方面也表现得更好!
但我也同意这些评论 - 冗长的 if/else 检查序列通常是设计不足的症状。人们不需要完全放弃ifs (请参见此处) - 但假设您主要关心的是提高当前代码的质量,您应该花时间研究这个问题,为什么该方法中有这么多 if 语句。
| 归档时间: |
|
| 查看次数: |
4102 次 |
| 最近记录: |