我正在研究函数调用的错误测试和报告技术,尤其是在调用多个函数时。作为我的意思的一个例子,为简单起见,每个函数都返回一个布尔值:
success = false;
if (fnOne ())
{
if (fnTwo ())
{
if (fnThree ( ))
{
success = true;
}
else
{
cout << "fnThree failed" <<endl;
}
}
else
{
cout << "fnTwo failed" <<endl;
}
}
else
{
cout << "fnOne failed" <<endl;
}
我发现上面的例子(我到处都能看到)代码很快变得不可读,尤其是当它调用代码变得多屏时。
目前我在 C++ 中处理这个问题的方式(包括'c'标签,以防有人拥有流畅的 C 技术)我在我的对象中存储了一个 bool 和一个字符串。bool 代表成功/失败,字符串代表失败状态的原因。我调用一个函数,如果函数失败,该函数在内部将对象设置为失败状态并提供基于字符串的原因。我仍然对这种方法不是 100% 满意......但它是迄今为止我所拥有的最好的。它的外观示例:
void myobj::fnOne (void)
{
if (m_fluxCapacitorProngCount > 3)
{
setState (false, "myobj::fnOne - Flux capacitor has been breeding again");
}
}
void myobj::fnTwo (void)
{
if (m_answerToLifeUniverseAndEverything != 42)
{
setState (false, "myobj::fnTwo - Probability drive enabled?");
}
}
void myobj::setup (void)
{
// Ensure time travel is possible
if (valid())
{
fnOne ();
}
// Ensure the universe has not changed
if (valid())
{
fnTwo ();
}
// Error? show the reason
if (valid() == false)
{
cout << getStateReason () << end;
}
}
其中valid()返回true/false,getStateReason()返回错误发生时函数中提供的字符串。
我喜欢它不需要嵌套条件就可以增长,对我来说我觉得这更具可读性,但我确信存在问题......
处理检测和报告多个函数调用返回条件的最佳 [干净] 方法是什么?