Ключевое слово assert (проверка) появилось в Java 1.4. Мне кажется, многие до сих пор стараются его избегать, или заворачивать в утилитные статические методы с возможностью быстро поменять assert condition : message;
на
if (!condition)
throw new AssetionError(message);
по всему коду. Кто-то боится, что проверки недостаточно надежные, и если кто-то забудет их включить, какие-то баги останутся незамеченными. Кто-то, наоборот, маниакально думает о производительности: если кто-то включит проверки для подсистемы/библиотеки, написанной ребятами из первой группы, и забудет исключить пакеты или классы «производительной» библиотеки, исполнение будет замедленно бесполезными вычислениями.
Хотя, по-моему, ничего страшного в проверках нет, их можно и нужно расставлять по коду как можно щедрее. Во-первых, как я уже упомянул (но для кого-то это может оказаться в новинку), проверки можно гибко настраивать (включать/отключать в пакетах и отдельных классах) как из командной строки при запуске JVM, так и программно (через ClassLoader), так что если вы вдруг захотите включить проверки в одной системе и выключить — в другой, это уж точно решаемая проблема.
Во-вторых, иногда хочется проверять не тривиальные условия вроде какая-то булева переменная == false или true
, а поддерживать некоторое проверочное состояние внутри класса и сверяться с ним в методах. С помощью трюка с assert
можно добиться этого практически бесплатно при исполнении с отключенными проверками.
Читать полностью »