Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
их можно и нужно расставлять по коду как можно щедрее
Такое логгирование ничем не лучше по производительности, потому что надо поддерживать то же самое проверлчное состояние и делать те же проверки
за исключением того, что оно не будет падать, хотя, по-хорошему, должно
после отладкиА потом, когда вылезет новый баг, обратно весь код добавлять?
Assert нужен в случае, когда, по вашим представлениям, условие должно выполняться абсолютно всегда
Не согласен. assert выкидывает AssetionError, который сложно обрабатывать и пользователю ничего не скажет. AssetionError наследуется от Error, то есть не перехватывается catch(Exception exp) и все система упадет целиком без какой-то работы над ошибками.Не ясен смысл возражения. AssertionError не предназначен для обработки внутри приложения и создан именно для того, что бы приложение упало. Для ловли ошибок есть куча других exceptions.
может сложиться ситуация при очень «щедром» использовании assert'ов, система упадет у товарищей по команде,Щедрость проверок не должна ни на что влиять, потому что они никогда не должны падать. Если падает, при этом вы считаете, что система без проверок-то рабочая, вы неправильно используете проверки.
Падение кода — это прекрасно. Это значит, что баг не привел к тихому неправильному поведению, деньги/заказы в интернет магазине/заявки не потеряли и т. д.
class MyClass {
private static final boolean ADVANCED_VERIFICATION =
Boolean.parseBoolean(System.getProperty("myapp.MyClass.ADVANCED_VERIFICATION"));
...
if(ADVANCED_VERIFICATION) {
initReferenceSet();
}
...
}лишние 10-20% кода увеличивают время для прочтения и понимания, что происходит в коде
assert initReferenceSet();
assert addToReferenceSet(e);
//....
assert removeFromReferenceSet(o);
assert referenceSet.size() == size() :
"Cool size diverged from reference size";
не хорошо, когда приложение разваливается на некорректных данных.
Проверочное состояние в Java