我知道这是用户偏好一些,但我确实努力从每个功能建立单退出点,或至多两个出口点(但必须是明显和容易断点):
const Bool funcFoo(int someval, int someval2, int someval3)
{
if(someval == okval)
{ // We're ok
if(someval2 == okval2)
{ // Still ok.
if(someval3 == okval3)
{ // Yippee! We made it!
return True; // <===== ONLY SUCCESS RETURN POINT
}
}
}
// Houston, we had a problem.
return False; // <===== ONLY FAIL RETURN POINT
}
在有“else”的问题,这是一个类似解缠的情况,但我们只保留两个返回点:
const Bool funcFoo(int someval, int someval2, int someval3)
{
if(someval == okval)
{ // We're ok
if(someval2 == okval2)
{ // Still ok.
if(someval3 == okval3)
{ // Yippee! We made it!
return True; // <===== ONLY SUCCESS RETURN POINT
}
else
{ // someval3 is bad.
//...maybe handle, not return.
}
}
else
{ // someval2 is bad.
// ...maybe handle, not return.
}
}
else
{ // someval is bad.
// ...maybe handle, not return.
}
// Houston, we had a problem.
return False; // <===== ONLY FAIL RETURN POINT
}
几件事情要提:
一个返回点是最好的。两个 返回点是可以接受的,如果他们 是显而易见的(您的错误通常要求退货或失败继续)。
有时“else”仅用于 调试的目的,在此 点我包起来#ifdef _DEBUG ... #endif
有时“测试”应该是 成功,有时失败, 取决于哪个是最 适合嵌套。
此方法(嵌套测试)是 有时与连续测试 连接。但是,嵌套测试通常优选为 。