特に複数の関数が呼び出された場合に、関数呼び出しからのエラー テストとレポートの手法を調べています。簡単にするために、各関数は bool を返します。
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 は成功/失敗を表し、文字列は失敗状態の理由を表します。関数を呼び出し、関数が失敗した場合、関数はオブジェクトを内部的に失敗状態に設定し、文字列ベースの理由を提供します。私はまだこの方法に 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 () はエラーが発生したときに関数で提供された文字列を返します。
私はこれが条件を入れ子にする必要なしに成長するのが好きです、私にはこれがより読みやすいと思いますが、問題があると確信しています...
複数の関数呼び出しの戻り条件の検出と報告を処理するための最良の [最もクリーンな] 方法は何ですか?