Шаг 44.
Язык программирования C#. Начала
Управляющие инструкции. Перехват исключений

    На этом шаге мы рассмотрим конструкции, используемые для обработки исключений.

    Непосредственного отношения к управляющим инструкциям обработка исключений не имеет. Вообще, перехват исключений - тема большая и многогранная. Здесь мы только кратко познакомимся с тем, как в языке C# на наиболее простом уровне может осуществляться перехват и обработка исключений. Причин для такого "преждевременного" знакомства две. Во-первых, те приемы, которые мы рассмотрим далее, полезны в прикладном смысле. С их помощью можно значительно повысить надежность и область применимости программных кодов. Во-вторых, некоторая аналогия между обработкой ошибок и управляющими инструкциями все же есть - в определенном смысле это напоминает синтаксическую конструкцию, подобную условной конструкции. Но если в условной конструкции проверяется логическое выражение (условие), то при обработке исключении роль "условия" играет ошибка, которая может возникнуть, а может не возникнуть.


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

    Так что же такое исключение и что с ним можно делать? Дело в том, что при выполнении программы могут возникать ошибки. Речь не идет об ошибках, связанных с неправильно написанным программным кодом. Речь об ошибках, которые связаны с тем или иным режимом выполнения программы. Например, программа выдает запрос для ввода пользователем числа. Но ведь нет никакой гарантии, что пользователь введет именно число. В таком случае, когда программа попытается преобразовать введенное пользователем значение в число, может возникнуть ошибка. И возникнет она или нет - всецело зависит от пользователя, а не от программиста. Что может сделать программист? Программист может предусмотреть реакцию программы в случае, если пользователь вводит не число. Вот здесь и окажется полезной обработка исключительных ситуаций.


Если при выполнении программы происходит ошибка (говорят, что генерируется исключение), то в соответствии с типом ошибки создается специальный объект, который называется объектом ошибки, или исключением. Программу можно "научить" реагировать на ошибки. В таких случаях речь идет о перехвате и обработке исключений. То есть обработка исключений - это "комплекс мероприятий", выполняемых в связи с тем, что в программе в процессе выполнения возникла ошибка. Если в программе обработка исключений не выполняется, то возникновение ошибки приводит к завершению выполнения программы.

    Итак, исходная постановка задачи формулируется следующим образом. Имеется некоторый программный код, при выполнении которого может возникнуть ошибка. Необходимо так организовать программу, чтобы даже в случае возникновения ошибки она продолжала выполнение. Для решения этой задачи есть хороший рецепт.


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

    Идея состоит в том, чтобы использовать try-catch конструкцию. А именно, программный код, при выполнении которого может возникнуть ошибка (контролируемый код), помещается в try-блок. Делается это так: указывается ключевое слово try, а блок программного кода размещается в фигурных скобках после этого ключевого слова. После try-блока размещается catch-блок: указывается ключевое слово catch и после него в фигурных скобках - программный код, предназначенный для обработки исключений. Вся конструкция выглядит так, как показано ниже:

try {
  // Контролируемый код
}
catch {
  // Код для обработки исключений
}

    Работает try-catch конструкция так. Если при выполнении программного кода в try-блоке ошибка не возникает, то программный код в catch-блоке игнорируется и после завершения выполнения кода в try-блоке начинает выполняться команда после try-catch конструкции. Проще говоря, если ошибок нет, то наличие catch-блока никак не проявляется. Но ситуация резко меняется, если при выполнении кода в try-блоке возникает ошибка. Происходит следующее: если при выполнении какой-то команды возникает ошибка, то на этом выполнение команд в try-блоке прекращается и начинается выполнение команд в catch-блоке. После того как команды в catch-блоке будут выполнены, начинают выполняться команды после try-catch конструкции. Самое важное во всей этой схеме: то, что, как бы ни развивались события, программа продолжает работу в штатном режиме. И это не может не радовать.

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг