По умолчанию реакцией на возбуждение исключения является прекращение работы программы. Обычно программа сообщает об имени исключения и месте его возникновения, хотя это зависит от компилятора. В следующих уроках будет показано, каким образом можно переопределить эти действия, выполняемые по умолчанию.
Если завершение программы не желательно, то с помощью описания обработчика исключения следует указать Ada, что делать. Обработчик исключения устанавливает, какие исключительные ситуации необходимо обрабатывать и что делать, если возбуждено то или иное исключение.
Исключения - это, как правило, нечто необычное и неожиданное, поэтому их лучше использовать для обработки случаев возникновения серьезных ошибок. Они не должны использоваться для "ожидаемых" событий, так как это может замедлить а, при неправильном обращении, остановить программу. Места в програме, в которых возбуждается и обрабатывается исключение, могут быть расположены далеко друг от друга, что делает программы с большим количеством различных исключений трудными для понимания. Поэтому исключения должны быть использованы, когда подпрограмма не может выполнить свою работу по какой-либо важной причине.
В Ada существует несколько предопределенных исключений, которые возникают, в результате некоторых, определенных в языке, проверок. Одно из предопределенных исключений, которые чаще всего встречается,- это Constraint_Error. Оно возбуждается, когда значение выходит за пределы диапазона, заданного типом значения. Примером этого может служить попытка сохранения значения, которое слишком велико или слишком мало для данного типа, деление на ноль или использование некорректного индекса в массиве.
Естественно, необходимы некоторые затраты машинного времени для выполнения этих проверок, хотя они и меньше, чем можно предположить. Такие проверки можно запретить, но только после того, как программа полностью отлажена, хотя многие считают, что даже после завершения отладки не стоит этого делать.
Некоторые пакеты содержат описания их собственных исключений, например, в Text_IO определено исключение End_Error, которое возбуждается при попытке вызова процедуры "Get" после достижения конца файла, а Name_Error - при попытке открытия несуществующего файла.
В следующих уроках мы научимся описывать, возбуждать и управлять исключениями.
Если вы пишете пакет, который связан с изображением вида из кабины самолета, нужно ли возбуждать исключение, когда вид из дневного становится ночным?
Перейти к предыдущему разделу | Перейти к следующему разделу | Вернуться к содержанию Урока 10 |
---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s10s1.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк