如果多次嵌套或编码?

时间:2018-06-22 07:27:15

标签: java multiple-conditions nested-if

由于找不到与构造类似的问题,我将要提出该问题。

我有以下代码:

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
                }
            }
        }
    }
}

1 个答案:

答案 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
        }
    }
}