优化if else条件(分支中的可重复动作)

时间:2015-10-21 06:56:17

标签: if-statement optimization

我有这个代码。首先,jobDone为false,程序执行第一步,然后是第二步,并将jobDone变量设置为true,表明所有任务都已成功完成。

但是我可能会选择再次运行这段代码而我不想再做第一步,因为它可能没有必要。因此,如果作业已经完成至少一次,并且如果checkSomething()得出结论一切正常,那么它应该继续并仅执行secondStep();

否则,如果checkSomething()发现出错了,那么我必须重复第一步以及第二步(就像在初始情况下一样)。

jobDone = false;
if (jobDone) {
    if (checkSomething()) {
         doSecondStep();
    } else {
         doFirstStep();
         doSecondStep();
    }
} else {
    doFirstStep();
    doSecondStep();
    jobDone = true;
}

但我觉得我在重复自己。有没有更好的写作方式?谢谢你。

2 个答案:

答案 0 :(得分:1)

if(jobDone && checkSomething()) {
    doSecondStep();
} else {
    doFirstStep();
    doSecondStep();
    jobDone = true;
}

答案 1 :(得分:0)

第二步总是执行,我建议你先把它移到最后:

jobDone = false;
if (jobDone) {
    if (!checkSomething()) {
         doFirstStep();
    }
} else {
    doFirstStep();
    jobDone = true;
}
doSecondStep();

然而,只有一个条件会导致doFirstStep()不被执行,而当jobDone == true和checkSomething == false时,我们只能检查它。

整个事情可归纳为三行:

if (!(jobDone && !checkSomething())) { doFirstStep(); }
jobDone = !jobDone;
doSecondStep();