Часто, когда я пишу функцию, я хочу убедиться, что входные данные для нее действительны, чтобы как можно раньше обнаружить такие ошибки (я считаю, что это называется предварительными условиями). Когда предварительное условие не выполняется, я всегда выбрасываю исключение. Но я начинаю сомневаться в том, что это лучшая практика, и если нет, то утверждения будут более уместными.
Так, когда я должен сделать что: когда уместно использовать утверждение и когда уместно бросить исключение?
exceptions
assertions
gablin
источник
источник
Ответы:
Утверждения должны использоваться только для проверки условий, которые, по логике, не могут быть ложными (читай: проверки работоспособности). Эти условия должны основываться только на входах, сгенерированных вашим собственным кодом. Любые проверки, основанные на внешних входах, должны использовать исключения.
Простое правило, которому я склонен следовать, - это проверка аргументов частных функций с помощью утверждений и использование исключений для аргументов открытых / защищенных функций.
источник
Утверждения используются для поиска ошибок программирования. Ваши программы должны работать так же хорошо, когда все утверждения удалены.
Исключения, с другой стороны, относятся к ситуациям, которые могут произойти, даже когда программа идеальна; они вызваны внешними воздействиями, такими как оборудование, сеть, пользователи и т. д.
источник
Типичная практика программирования состоит в том, чтобы компилировать утверждения из сборок выпуска / выпуска. Утверждения помогут только во время внутреннего тестирования уловить ошибочные предположения. Вы не должны принимать на себя поведение внешних агентств, поэтому вы не должны утверждать о событиях из сети или пользователя. Также хорошей практикой является написание кода обработки для производственных сборок в случае сбоя утверждения.
Например, в C,
Исключения предназначены для встраивания в производственные сборки. Альтернативой для исключения является возвращение ошибки, а не утверждения.
источник
Одна проблема с утверждениями для меня состоит в том, что они отключены по умолчанию в Java.
Мы используем стратегию «первый сбой», когда программе, которая могла работать без присмотра в течение многих лет, необходимо как можно раньше завершать работу, чтобы избежать повреждения данных в случае неверных данных (в неожиданной форме). Это то, для чего мы используем проверку, и, используя утверждения, мы в основном рискуем, что они не активны.
источник