Утверждение против исключения при разработке библиотеки - PullRequest
4 голосов
/ 09 сентября 2010

Я занимаюсь разработкой библиотеки для дальнейшего использования в других библиотеках или конечных продуктах.Допустим, пользователь использует библиотеку неверным образом - передает неуместное значение в публичную функцию, вызывает функции в неправильном порядке и т. Д.

В этом случае я могу вызвать исключение, но обычно оно предназначено дляконечные продукты и должны обрабатываться соответствующим образом, в то время как здесь у нас есть ошибка разработчика, которая не прочитала документацию должным образом.С другой стороны, он или она является пользователем моей библиотеки, и поэтому утверждение может оказаться неправильным (представьте утверждение, которое сработало в коде, который вы никогда не писали и ожидали, что он просто сработает).

До сих пор я использовал утверждения только внутри частных внутренних функций и методов, таким образом уведомляя только me о моих ошибках внутри библиотеки.В случае неправильного использования пользователями библиотеки я всегда выкидываю исключение с описанием ошибки (и советами, как этого избежать).

Как вы думаете, это правильный подход?Если нет, то какое правило вы используете для утверждений и исключений при разработке библиотеки?

Ответы [ 2 ]

5 голосов
/ 09 сентября 2010

Да, это правильный подход.Утверждение в порядке для внутреннего использования в частных функциях.В случае, если клиент вызывает публичный метод с неверными параметрами, должно быть сгенерировано исключение.Неправильный код должен немедленно привести к сбою программы, это лучший шанс исправить ошибку.Рекомендуется использовать разные типы исключений для ожидаемых ситуаций (файл не найден, устройство не отвечает и т. Д.) И ошибки вызывающего абонента, например, неправильное значение параметра.Код клиента должен перехватывать ожидаемые исключения, оставляя непредвиденные исключения необработанными.Когда возникает непредвиденное исключение, клиентская программа аварийно завершает работу, и программист просто исправляет ошибку.

Однако, если ваша библиотека написана для внутреннего использования в той же компании, то нормально обрабатывать публичные ошибки вызова методов, такие как privateс утверждениями.Но этот подход должен быть строго ограничен и не должен использоваться для внешних клиентов.

1 голос
/ 09 сентября 2010

Утверждения не будут работать в сборках выпуска, исключения - единственный способ сообщить пользователю библиотеки, что что-то не так

...