Отладка с помощью проверочных утверждений (assertions)
// Считает факториал числа n. Число n должно быть в пределах от 0 до 10 int factorial(int n)
{
//Факториал отрицательного числа не вычисляется assert(n >= 0);
//Если n превысит 10, то это может привести либо к целочисленному
//переполнению результата, либо к переполнению стека.
assert(n <= 10);
if (n < 2) { return 1;
}
return factorial(n - 1) * n;
}
//мы 'забыли' об ограничениях функции factorial() и пытаемся вычислить
//факториалы чисел от 0 до 99.
//проверка внутри factorial() напомнит нам о своих ограничениях,
//так что мы сможем быстро выявить и исправить этот баг.
//если бы эта проверка отсутствовала, то баг мог бы долго оставаться незамеченным,
//периодически давая о себе знать переполнениями стека и некорректным поведением for (int i = 0; i < 100; ++i) {
a[i] = factorial(i);
21
}
Отладка с помощью проверочных утверждений (assertions)
22
Реализация постусловий с помощью
проверочных утверждений (assertions)
23
Управление механизмом проверочных утверждений
во время выполнения программы
•Если механизм проверочных отключен, то код работает также быстро, как будто бы их там и не было вообще
•По умолчанию механизм проверочных утверждений выключен. Включается следующим образом:
java –enableassertions MyProgram
или
java –ea MyProgram
•Механизм проверочных утверждений может быть включен отдельно для классов, пакетов или наборов пакетов.
24