Я даю ответ, который не совсем уместен.Конечно, вы можете использовать assert в публичных методах (или где угодно).
Суть в том, что вы должны делать или нет.Я сам прекрасно понимаю реакцию других людей о том, когда вы должны или не должны использовать утверждение.
Но я должен признать, что НИКОГДА не использую утверждения и что я редко, если когда-либо вижу утверждения в коде.Я работал всего несколько лет, но в 4 совершенно разных компаниях, в которых я работал, не было никаких утверждений в коде.Будь то веб-приложение с кодом более 10 миллионов строк для бронирования рейсов, центр управления космическим кораблем, программное обеспечение для управления гипермаркетом или система отслеживания ошибок.Никто из них не использовал утверждения.У всех компаний были разные потребности и методы.Никто не использовал утверждения.
Для меня причина проста.Люди здесь говорят, что утверждения для отладки.Все в порядке.И что вы можете отключить их для повышения скорости.Это тоже хорошо ... Сначала.Чем сложнее программа, тем больше времени проходит отладка.И некоторые ошибки, даже при 100% покрытии кода, даже при обширной интеграции и проверочном тестировании, вы найдете их только в производстве.Просто потому, что ваши пользователи используют ваше приложение чаще, чем вы.И они не будут использовать его так же, как вы.
Это забавно, потому что в производственных журналах мы постоянно видим следы стека из кода, подобного следующему:
catch (MyException e) {
logger.war("This should never happen",e);
}
Это означает, что вы никогда не знаете, что может произойти в работе.
И что, если у вас есть возможность сделать чек, сделайте это.Конечно, комментарии в журнале скорее смешные, чем полезные, и было бы лучше, чтобы исключение всплыло.
Во всех случаях не делайте это утверждением, которое будет отключено в производстве.Потому что это будет бесполезно.Сделайте это нормальным кодом, который вызывает исключение.Убедитесь, что он зарегистрирован, если это необходимо.Убедитесь, что ошибка будет отображаться в пользовательском интерфейсе.И убедитесь, что вы сможете получить исключение и журналы для расследования.
Важно то, что в тот или иной день какой-то пользователь будет делать то, что выдает предупреждение.Будь то из-за плохо написанного кода или чего-то еще, вы увидите это.А это значит, что вместо того, чтобы тратить 2 дня на выяснение, почему, черт возьми, программа ведет себя так странно, вы сможете использовать полную трассировку стека в начальной точке и исправить проблему за 2 часа.
Проверкас отключенным утверждением - то же самое, что без проверки вообще.Это код, который вы должны написать, прочитать и поддерживать ... Ни за что.Я понимаю весь аргумент производительности, когда утверждения в производстве замедляют работу.Да, в некоторых случаях возникает проблема с производительностью.В большинстве случаев вы почти ничего не получите и потеряли драгоценные подсказки.