次のコードスニペットについて考えてみます。
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.");
コードがエラー状態を検出した場合にカスタム例外をスローするこの方法をお勧めしますか?このような状況になったらどうしますか?