由于找不到与构造类似的问题,我将要提出该问题。
我有以下代码:
for (Object o : array1) {
for (Object o2 : array2) {
if (condition1) {
//get a variable for condition2 (depends on iteration elements)
if (condition2) {
if (condition3) {
//do something
} else if (condition4) {
//do something
}
}
}
}
}
我也可以将其写为
for (Object o : array1) {
for (Object o2 : array2) {
if (condition1 && condition3) {
// get a variable for condition2 (depends on iteration elements)
if (condition2) {
// do something
}
} else if (condition1 && condition4) {
// get a variable for condition2
if (condition2) {
// do something
}
}
}
}
将以相同的方式工作。在第一个示例中,我尝试尽可能多地使用代码,而在第二个示例中,我不得不多次使用相同的代码。
现在我读了on this question,如果可能的话,应该避免嵌套。但是,根据我的理解,不要多次使用第一个示例中的相同代码也很干净。
我的问题是,应该避免多次嵌套相同代码的代价吗?我在这里询问的是最佳做法/标准,而不是意见。
我知道我可以将其移动到一个单独的方法中,但是最后我大概会有相同数量的代码。
编辑:
借助Lino的回答和评论,我想到了以下结构:
for (Object o : array1) {
// get a variable for condition2 (depends on iteration elements)
if (condition2) {
for (Object o2 : array2) {
if (condition1) {
if (condition3) {
// do something
} else if (condition4) {
// do something
}
}
}
}
}
答案 0 :(得分:1)
假定条件3和4仅在条件1和2必须计算为true
时才执行,然后以下代码片段将发挥最佳效果:
for (Object o : array1) {
for (Object o2 : array2) {
if (condition1 && condition2) {
if (condition3) {
//do something
} else if (condition4) {
//do something
}
}
}
}
如果您仍然不喜欢嵌套ifs,则可以存储condition1 && condition2
的结果:
for (Object o : array1) {
for (Object o2 : array2) {
final boolean condition1And2 = condition1 && condition2;
if (condition1And2 && condition3) {
//do something
} else if (condition1And2 && condition4) {
//do something
}
}
}