2011-10-27 15 views
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."); 

はあなたのコードがエラー状態を検出した場合は、カスタム例外をスローするこの練習を勧めますか?このような状況があるときはどうしますか?

答えて

1

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

関連する問題