Исключения разработчика
Исключения разработчика
Все исключения, изучаемые до сих пор, были результатом событий внешних по отношению к ПО (сигналы операционной системы) или принудительных следствий его работы (нарушение утверждений). В некоторых приложениях полезно, чтобы исключения возникали по воле разработчика в определенных ситуациях.
Такие исключения называются исключениями разработчика. Они характеризуются как целочисленным кодом, отличающимся от системных кодов, так и именем (строкой), которые могут быть использованы, например, в сообщениях об ошибке. Можно использовать следующие свойства для возбуждения исключения разработчика и для анализа его свойств в предложении rescue.
trigger (code: INTEGER; message: STRING)
-- Прерывает выполнение текущей программы, выбрасывая исключение с кодом
-- code и связанным текстовым сообщением.
developer_exception_code: INTEGER
-- Код последнего исключения разработчика
developer_exception_name: STRING
-- Имя, ассоциированное с последним исключением разработчика
is_developer_exception: BOOLEAN
-- Было ли последнее исключение исключением разработчика?
is_developer_exception_of_name (name: STRING): BOOLEAN
-- Имеет ли последнее исключение разработчика имя name?
ensure
Result := is_developer_exception and then
equal (name, developer_exception_name)
Иногда полезно связать с исключением разработчика контекст - произвольный объект, структура которого может быть полезной при обработке исключения разработчика:
set_developer_exception_context (c: ANY)
-- Определить c как контекст, связанный с последовательностью
-- исключений разработчика (причина вызова компонента trigger).
require
context_exists: c /= Void
developer_exception_context: ANY
-- Контекст, установленный последним вызовом
set_developer_exception_context
-- void, если нет такого вызова.
Эти свойства позволяют использовать стиль программирования, в котором обработка исключений представляет часть общего процесса работы с программными элементами. Авторы одного из трансляторов при разборе текстов предпочитали выбрасывать исключения при появлении особых случаев, после чего вызывать для их анализа специальные программы. Это не мой стиль работы, но по сути, ничего ошибочного в нем нет, так что механизм исключений разработчика для тех, кому нравится так работать.