170 похожих чатов

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

каких случаях конструкция try catch нужна, а в каком assert? Что в одном, что в другом случае можно вызвать событие, только в первом можно продолжить работу, во втором программа падает. Вот только вопрос, зачем нужен тогда второй вариант?

16 ответов

11 просмотров

Assert - если что-то пошло не так - пристрелить к чертям. Try / catch- попытаться как-то обработать

jon-pedro Автор вопроса
🐈
Assert - если что-то пошло не так - пристрелить к ...

А когда нужны такие радикальные меры?

jon pedro
А когда нужны такие радикальные меры?

Когда лень/ бесполезно обрабатывать

🐈
Когда лень/ бесполезно обрабатывать

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

Alexander Karaev
Неправда. Ассерты для проверки инвариантов, которы...

В теории да. На практике - за ассерты в либах хочется ругаться.

assert – это про ситуации "да ни при каких внешних или внутренних обстоятельствах такого быть не может", в таких ситуациях обработка ошибок не имеет смысла – вы не можете обработать то, чего, собственно, не может быть assert должен содержать всегда истинное условие в качестве самодокументации

Alexander Karaev
Неправда. Ассерты для проверки инвариантов, которы...

Вот например, здесь точно необходимы ассерты? https://github.com/ttk592/spline/blob/master/src/spline.h

🐈
Вот например, здесь точно необходимы ассерты? htt...

Их пытаются использовать в качестве контрактов, которые ещё не доехали в язык

jon-pedro Автор вопроса
Ofee Oficsu
assert – это про ситуации "да ни при каких внешних...

И как эти условия выбираются? Из балды кидается куча вариантов, авось попадёт?

🐈
Вот например, здесь точно необходимы ассерты? htt...

Ассерты иногда можно заменить на нормальную обработку ошибок, да. Здесь они нужны не везде, но это решение автора определить контракты таким образом

jon pedro
И как эти условия выбираются? Из балды кидается ку...

У вас ещё на этапе написания кода начинают возникать догадки, что в некотором месте кода некоторые условия всегда истинны. Вместо того, чтобы слепо полагаться на такую догадку – задокументируйте её в коде в виде assert. Если догадка верна – для вас ничего не изменится. Если не верна – это предлстережёт вас от незаметных ошибок

jon pedro
И как эти условия выбираются? Из балды кидается ку...

Условия - это контракт. Скажем, вы пишите функцию вычисления квадратного корня. Заявляете, что вычисление допустимо только для положительных.

Anatoly Shirokov
Условия - это контракт. Скажем, вы пишите функцию ...

Чтобы не оставлять в рантайме проверку (например, накладуха на проверку при массовых вычислениях недопустима) вы можете поместить в ассерт

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта