Код, который обнаруживает свои собственные ошибки? - PullRequest
1 голос
/ 27 октября 2011

Рассмотрим следующий фрагмент кода:

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, я получу исключение ArgumentOutOfRangeException для оператора _data[index - 1].Я мог бы позволить этому исключению всплыть, но я бы предпочел сделать это:

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

Вы бы порекомендовали эту практику создания пользовательского исключения, если ваш код обнаруживает состояние ошибки?Что вы делаете, когда у вас такая ситуация?

1 Ответ

1 голос
/ 27 октября 2011

Лично я включаю подобные исключения. Это как аргумент презерватива: лучше иметь его и не нуждаться в нем, чем в том, чтобы иметь его и не иметь его. Если в редком случае это произойдет, то добавление пользовательского сообщения об исключении значительно упростит отслеживание логической ошибки, но ваш исполняемый файл будет лишь чуть-чуть больше. В противном случае ваше ArgumentOutOfRangeException может произойти где угодно. Время, необходимое для добавления исключения, значительно превышает время, необходимое для отслеживания ошибки без нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...