我有一个带有一些代码的项目,如下所示:
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();
我想知道这是不是很好的编程习惯?以这种方式使用无界循环进行流量控制是否存在任何可维护性问题?什么是更好的替代编码结构?
答案 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个。)