使用无界循环进行流量控制是否有任何问题?

时间:2017-11-12 20:15:54

标签: java for-loop

我有一个带有一些代码的项目,如下所示:

L: for (;;) {
    if (someBool) {
        someOtherBool = doSomeWork();
        if (someOtherBool) {
            doFinalWork();
            break L;
        }
        someOtherBool2 = doSomeWork2();
        if (someOtherBool2) {
            doFinalWork2();
            break L;
        }
        someOtherBool3 = doSomeWork3();
        if (someOtherBool3) {
            doFinalWork3();
            break L;
        }
    }
    bitOfData = getTheData();
    throw new SomeException("Unable to do something for some reason.", bitOfData);
}
progressOntoOtherThings();

我想知道这是不是很好的编程习惯?以这种方式使用无界循环进行流量控制是否存在任何可维护性问题?什么是更好的替代编码结构?

1 个答案:

答案 0 :(得分:0)

从上面的评论(问题)看来,代码编写得很糟糕。我需要重构它,因为我的任务是在原始代码中添加更多分支(我不允许发布实际代码,因此在我将其转换为某些伪代码的问题中)。这就是我最终的结果:

void method() {
    if (!someBool) {
        throwingMethod();
    }
    someOtherBool = doSomeWork();
    if (someOtherBool) {
        doFinalWork();
    } else {
        someOtherBool2 = doSomeWork2();
        if (someOtherBool2) {
            doFinalWork2();
        } else {
            someOtherBool3 = doSomeWork3();
            if (someOtherBool3) {
                doFinalWork3();
            } else {
                throwingMethod();
            }
        }
    }
    progressOntoOtherThings();
}
void throwingMethod() throws SomeException {
        bitOfData = getTheData();
        throw new SomeException("Unable to do something for some reason.", bitOfData);
}

因此,异常抛出已经转移到它自己的方法中(顺便说一句,这些行在实际代码中要广泛得多)。

我现在要尝试更改真实代码。幸运的是,我们已经进行了一些单元测试,因此我对这些变化充满信心。但是,我并不完全满意,因为我觉得我最终会遇到很多if ... else嵌套,因为实际代码比上面的例子复杂得多。 (仅供参考,上面有4个分支,但实际代码可能有40或50个,我需要再增加11个。)