каких случаях конструкция try catch нужна, а в каком assert? Что в одном, что в другом случае можно вызвать событие, только в первом можно продолжить работу, во втором программа падает. Вот только вопрос, зачем нужен тогда второй вариант?
Assert - если что-то пошло не так - пристрелить к чертям. Try / catch- попытаться как-то обработать
А когда нужны такие радикальные меры?
Когда лень/ бесполезно обрабатывать
Неправда. Ассерты для проверки инвариантов, которые не должны быть нарушены ни при каких условиях работы программы. Обычно нарушение ассерта означает невозможность исправления ситуации
В теории да. На практике - за ассерты в либах хочется ругаться.
assert – это про ситуации "да ни при каких внешних или внутренних обстоятельствах такого быть не может", в таких ситуациях обработка ошибок не имеет смысла – вы не можете обработать то, чего, собственно, не может быть assert должен содержать всегда истинное условие в качестве самодокументации
Вот например, здесь точно необходимы ассерты? https://github.com/ttk592/spline/blob/master/src/spline.h
а еще они отключаются обычно в релизе
Их пытаются использовать в качестве контрактов, которые ещё не доехали в язык
И как эти условия выбираются? Из балды кидается куча вариантов, авось попадёт?
Ассерты иногда можно заменить на нормальную обработку ошибок, да. Здесь они нужны не везде, но это решение автора определить контракты таким образом
есть такое мнение https://i.imgur.com/cyVI1p6.png
У вас ещё на этапе написания кода начинают возникать догадки, что в некотором месте кода некоторые условия всегда истинны. Вместо того, чтобы слепо полагаться на такую догадку – задокументируйте её в коде в виде assert. Если догадка верна – для вас ничего не изменится. Если не верна – это предлстережёт вас от незаметных ошибок
Условия - это контракт. Скажем, вы пишите функцию вычисления квадратного корня. Заявляете, что вычисление допустимо только для положительных.
assert это для дебага по большому счету
Чтобы не оставлять в рантайме проверку (например, накладуха на проверку при массовых вычислениях недопустима) вы можете поместить в ассерт
Обсуждают сегодня