1

次のコードスニペットについて考えてみます。

int index = FindClosestIndex(frame);
if (_data[index].Frame == frame)
    return _data[index];
else
    return interpolateData(frame, _data[index - 1], _data[index]);

さて、この場合、このコードブロックの前にチェックを行って、FindClosestIndex()0が返されないことを確認しました。不可能なはずです。ただし、のロジックFindClosestIndexはやや複雑であるため、誰も予期していなかったまれなコーナーケースでバグがまだ発見されていない可能性があり、コードが正しいFindClosestIndex場合でも誤って0を返す可能性があります。

0が返される場合は、_data[index - 1]ステートメントでArgumentOutOfRangeExceptionが発生します。私はその例外をバブルアップさせることができましたが、私はむしろこれをしたいと思います:

if (index == 0)
    throw new ApplicationLogicException("There is a bug that caused FindClosestIndex to return an int <= 0 when it shouldn't have.");

コードがエラー状態を検出した場合にカスタム例外をスローするこの方法をお勧めしますか?このような状況になったらどうしますか?

4

1 に答える 1

1

個人的には、そのようなカスタム例外を含めます。それはコンドームの議論のようなものです: 必要で、それを持っていないよりも、持っていて、それを必要としない方が良い. まれに発生する場合は、カスタム例外メッセージを含めることで、ロジック エラーの追跡がはるかに簡単になりますが、実行可能ファイルはほんの少しだけ大きくなります。そうしないと、ArgumentOutOfRangeException がどこでも発生する可能性があります。例外を追加するのにかかる時間は、それなしでエラーを追跡するのにかかる時間よりもはるかに重要です。

于 2011-10-27T19:58:29.737 に答える