может ли кто-нибудь объяснить смысл утверждения «утверждения позволяют вам проверять свои предположения во время разработки, но код утверждения в основном испаряется при развертывании программы, не оставляя после себя накладных расходов или кода отладки, который нужно отследить и удалить»
во время разработки и развертывания, как ведут себя утверждения утверждения
Ответы (3)
РЕДАКТИРОВАТЬ: утверждения следует использовать для обнаружения ошибок кодирования, а не ошибок ввода.
Они позволяют документировать предположения, сделанные при кодировании, таким образом, чтобы их можно было применять при включенных утверждениях. Однако эти проверки - те, в которых хорошо протестированная программа не должна нуждаться после выпуска.
Они не подходят для проверки пользовательского ввода, поскольку они не предназначены для удобства и предполагают, что единственный способ исправить ошибочное утверждение - исправить код (часто убивая или отключая программу в процессе)
Для проверки пользовательского ввода лучше использовать if(!condition) friendly_user_message()
.
assertions позволяют выполнять дорогостоящие тесты, которые вы хотите отключить для производственного cocde.
JVM оптимизирует утверждения, когда они не включены.
РЕДАКТИРОВАТЬ: у вас может быть сложная проверка, которую вы хотите выполнить, если утверждения включены. Это можно сделать двумя способами.
boolean debug = false;
assert debug = true;
if (debug) // do something.
OR
assert validate();
// later
private boolean validate() {
return passed;
}
if (userInput > MAXIMUM) System.out.println("Number is too large, must be less than "+ MAXIMUM+" , try again")
. Вы не должны полагаться на утверждения для проверки пользовательского ввода, поскольку они не предназначены для удобства. Утверждения следует использовать для того, что вы можете отключить, если знаете, что программа работает.
- person Peter Lawrey; 23.03.2011
assert arg != null
При правильном кодировании ваш аргумент никогда не будет изменен null
Однако у вас может быть ошибка в коде или вы можете ввести ошибку в будущем, и assert позволит вам быстро исправить ошибку. Как только ошибка будет исправлена, утверждение assert не понадобится, но вы оставите его там на случай, если позже измените код.
- person Peter Lawrey; 23.03.2011
assert arg >= 0;
означает, что любой, кто вызывает этот код, знает, что ему не следует передавать отрицательный аргумент, и код будет проверять его при разработке (поэтому это лучше, чем просто комментарий, в котором говорится то же самое)
- person Peter Lawrey; 23.03.2011
Как правило, это означает, что, поскольку утверждения являются исключительно инструментом разработки, пока вы разрабатываете, вы можете запускать свою виртуальную машину с переключателями -enableassertions или -ea, которые будут выполнять ваши утверждения во время выполнения, это часть «утверждения позволяют вам проверять свои предположения во время разработки». заявление.
Я предполагаю, что в контексте того, что вы читаете, «развертывание» (возможно, производство?) Означает, что виртуальная машина запускается без -enableassertions или -ea, которые не будут запускать ваши утверждения (они просто пропустят их), таким образом, «оставив без накладных расходов или кода отладки, который нужно отследить и удалить ".
assert
на операторы if
. Если вы используете веб-сервер, вам нужно найти способ заставить его выполнять утверждения в производственной среде.
- person Simeon; 23.03.2011
Утверждения в java включаются указанием переключателя -enableassertions
или -ea
при запуске программы. В противном случае все ваши assert
утверждения будут проигнорированы. Справа здесь у вас есть ссылка с учебником по утверждениям. Надеюсь на помощь.