код в этот вопрос заставил меня задуматься
assert(value>0); //Precondition
if (value>0)
{
//Doit
}
Я никогда не пишу оператор if. Достаточно утверждать / все, что вы можете сделать.
"Сбой рано, часто сбой"
CodeComplete состояния:
- Утверждение assert делает приложение корректным
- If-test делает приложение Robust
Я не думаю, что вы сделали приложение более надежным, исправив неверные значения ввода или пропустив код:
assert(value >= 0 ); //Precondition
assert(value <= 90); //Precondition
if(value < 0) //Just in case
value = 0;
if (value > 90) //Just in case
value = 90;
//Doit
Эти исправления основаны на предположениях, которые вы сделали относительно внешнего мира.
Только вызывающий объект знает, что такое «допустимое входное значение» для вашей функции, и он должен проверить ее действительность, прежде чем он вызовет вашу функцию.
Перефразировать CodeComplete :
«Реальные программы становятся слишком грязными, когда мы не полагаемся исключительно на утверждения».
Вопрос: не прав ли я, упрямый, глупый, слишком не оборонительный ...