47
переход к следующей, не доходя до конца тела цикла в тексте (continue
в Си). Есть оператор, прерывающий выполнение текущего структурного
блока и вызывающий продолжение исполнения программы с места начала
следующего блока в тексте программы (break в Си).
Исключения
Одной из популярных современных идей, относящихся к механизмам
управления выполнением императивных программ, являются так
называемые
исключения. При выполнении программы возможны
различные нештатные ситуации (в вычислениях — попытка деления на
ноль, переполнение и пр., при работе с файлами — запись на защищенный
диск, при поиске данных — отсутствующая запись и т. д.). Подобные
случаи традиционно отслеживались с помощью условного оператора и
оператора выбора. В наихудшем варианте, если программист не учел
возможности возникновения непредвиденной ситуации, происходит
«вылет» из программы в операционную систему, часто с
невразумительным сообщением об ошибке, да еще и на английском языке.
Механизм исключений предназначен специально для выявления
нештатных вариантов исполнения. Блок с исключениями выглядит при
этом следующим образом:
Попытайся
Начало-блока-с-исключениями
{
<
Действия при выполнении которых может возникнуть ошибка>
Если (условие
1
)
создай исключение
1
Если (условие
2
) создай исключение
2
…
Если (условие
n
) создай исключение
n
}
В-случае-Ошибки
1
выполни <обработка исключения
1
>
В-случае-Ошибки
2
выполни <обработка исключения
2
>
…
В-случае-Ошибки
n
выполни <обработка исключения
n
>
Конец-блока-с-исключениями
Существует два принципиально разных механизма функционирования
обработчиков исключений.
Обработка с возвратом подразумевает, что
обработчик исключения ликвидирует возникшую проблему и приводит
программу в состояние, когда она может работать дальше по основному
алгоритму. В этом случае после того, как будет выполнена обработка,
управление передается обратно в программу, где возникла исключительная
ситуация. Обработка с возвратом типична для обработчиков асинхронных
48
исключений (которые обычно возникают по причинам, не связанным
прямо с выполняемым кодом), для обработки синхронных исключений она
малопригодна.
Обработка без возврата заключается в том, что после
выполнения обработки исключения управление передается в некоторое
заранее заданное место программы и с него продолжается исполнение. То
есть при возникновении исключения команда, во время работы которой
оно возникло, заменяется безусловным переходом к заданному оператору.
Пример на языке C#:
try
{
result = SafeDivision(a, b);
Console.WriteLine("{0}
деленный на {1} = {2}", a, b, result);
}
catch (DivideByZeroException e)
{
Console.WriteLine("
Попытка деления на ноль!");
}
Достарыңызбен бөлісу: