Использование диагностических утверждений Java

Использование диагностических утверждений JavaДиагностические утверждения(assertion) — это широко распространенные идиомы, применяемые для обеспечения надежности программирования. Допустим, вы убеждены в том, что конкретное свойство уже задано, и ссылаетесь на него в своей программе. Предположим, что вы вычисляете следующее выражение:

Вы уверены, что число x — неотрицательное. Возможно, оно получено в результате других вычислений, которые не могут порождать отрицательные числа, либо является параметром метода, которому можно передавать лишь положительные числа. Но вы все же хотите еще раз проверить свои предположения, чтобы в ходе выполнения программы не возникло ошибки.

Разумеется, можно было бы просто сгенерировать исключение:

Однако у такого подхода есть досадный недостаток — код остается в программе, даже если тестирование давно закончено. Если в тексте программы расставлено много таких проверок, ее выполнение может замедлиться.

Механизм диагностических утверждений позволяет вставлять в текст программы проверки, предназначенных для ее тестирования, а затем удалять их из окончательного варианта.

Начиная с версии Java SE 1.4, в языке появилось новое ключевое слово — assert. Оно имеет две формы:

и

Оба оператора вычисляют некое условие и генерируют исключение AssertionError, если оно не выполняется. Во втором операторе выражение передается конструктору объекта класса AssertionError и превращается в строку сообщения.

Единственная цель выражения при указании ключевого слова assert — создать строку сообщения. Объект класса AssertionError не хранит фактическое значение выражения, поэтому его невозможно использовать в дальнейшем. В документации, поставляемой совместно с JDK, непринужденно говорится, что это сделано для того, чтобы «утешить программистов, если диагностическое утверждение окажется неверным».

Чтобы проверить, является ли значение x неотрицательным числом, можно использовать такой оператор:

Можно также передать фактическое значение переменной x объекту AssertionError, чтобы он впоследствии вывел его на экран:

В языке C макрос assert превращает проверяемое условие в строку, которая выводится на экран, если оно не выполняется. Например, если выражение assert(x>=0) имеет значение false, на экран выводится строка, сообщающая, что условие x>=0 не выполняется. В языке Java условие не является неотъемлемой частью сообщения об ошибке. Если вы хотите увидеть его, передайте его в виде строки объекту класса:

Видео по теме:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *