Я НИКОГДА не использую утверждения в своем коде, я их страстно ненавижу. Я понимаю необходимость проверки и обработки ошибок, но предотвратить ошибку, которая приведет к сбою вашей программы, путем сбоя вашей программы самостоятельно .... честно говоря, я не вижу преимущества.
Также оставьте одно утверждение в своем коде, и закон Мерфи гарантирует, что оно в конечном итоге приведет к сбою вашей программы. Я предпочитаю проверять данные перед их обработкой и выдавать соответствующее исключение, чтобы они обрабатывались так же, как любые другие исключительные состояния или операции. По моему опыту, это дало программное обеспечение, которое было гораздо более стабильным в долгосрочной перспективе с детерминированным поведением с точки зрения пользователя.
Вы, как инженер-программист, будете знать, что делать, когда ваша программа выйдет из строя, большинство пользователей просто испугаются, что они что-то сломали, и в конечном итоге перестанут использовать ваше программное обеспечение. Так что если вы не разрабатываете для инженеров (что вполне возможно), да и то...
С точки зрения юзабилити утверждения ужасны, даже если они не «должны» произойти, мы все знаем, что в конечном итоге это произойдет...
Хорошо ... Из всех комментариев и огня, которые я получаю здесь, я думаю, что мне нужно дополнительно объяснить свою точку зрения, потому что она явно не понята.
Я не говорил, что не проверял исключения, странные значения или просто неправильные состояния, я просто сказал, что не использую утверждения из-за ужасного способа, которым они стремятся закрыть систему с точки зрения конечного пользователя. Кроме того, большинство современных языков предоставляют другой, типобезопасный способ обработки таких ситуаций, тогда я бы использовал assert, когда вполне хорошее исключение помогло бы, и это тоже неплохо.
В большей части производственного кода, который я видел, я заметил в основном два способа справиться с этим: намазать утверждения по всему коду, а затем оставить хороший набор в производстве. У этого есть приводящая в бешенство тенденция просто закрывать приложение для пользователя, я еще не видел, чтобы Assert изящно подвел систему .... он просто подвел ее ... бум ... ушел ... конечный пользователь просто сказал: «WTF ошибка утверждения по адресу 0x330291ff!!!"
Другой способ, даже худший, если вы спросите меня, заключался в том, чтобы просто поймать все, что было брошено, и спрятать его под ковер (когда-либо видел эти ужасные попытки поймать с пустыми фигурными скобками !!)
НИ ОДИН СПОСОБ не поможет получить хорошую стабильную систему. Конечно, вы можете использовать утверждения в своем бета-коде и удалить их все в своем производственном коде... но какого черта вам удалять свои сети безопасности, потому что это производство. Я был бы очень удивлен, если бы все эти проверки нанесли вред производительности вашей системы.
Создайте себе хорошую схему обработки исключений и... ей-богу... ОСТАВЬТЕ ЭТО ЗДЕСЬ, вы получите гораздо более значимую информацию о вашей системе, и если все сделано правильно, всегда в контексте, чем наличие какой-то глубокой библиотеки, выбрасывающей утверждения, потому что чего-то не хватает.
Это особенно верно при создании библиотек... думать, что вы, создатель библиотеки, можете решать, когда отключить всю систему из-за того, что что-то пошло не так в данных, которые были брошены вам, невероятно эгоистично и узколобо. Позвольте пользователю вашей библиотеки решить, что является достаточно важным, чтобы гарантировать аварийный отказ.
так что нет... я не использую утверждения... я использую исключения
И да... обычно код, который дает сбой в продакшене, редко имеет мое имя сверху.
person
Newtopian
schedule
04.07.2009