Секция Finally. Рекомендации по использованию исключений.
При использовании блоков Try-Catch нередко существует код, который должен выполняться как при нормальном завершении, так и при возникновении исключения. Например, в обоих случаях следует закрыть файлы, вызвать методы Dispose и т. д. Даже в простом примере, приведенном в начале главы, потребовалась команда ReadLine, чтобы консольное окно оставалось на экране до нажатия клавиши Enter.
Чтобы некоторый фрагмент выполнялся независимо от того, возникнет ли в программе исключение или нет, в блок Try-Catch включается секция Finally, выделенная в следующем примере жирным шрифтом:
Sub Main() Dim args() .argument As String args = Environment. GetCommandLineArgs() Try ProcessFile(argsd)) Catch Console.WriteLine("ERROR") Finally Console.WriteLine("Press enter to end") Console.ReadLine() End Try End Sub
Примечание
Код секции Finally выполняется до передачи исключений внешнему.коду и до возвра-щения из функции.
Рекомендации по использованию исключений
Исключения выглядят эффектно, и новички часто склонны злоупотреблять ими. В самом деле, стоит ли тратить время на анализ пользовательского ввода, когда можно просто инициировать исключение? Не поддавайтесь соблазну. При неправильном использовании обработка исключений существенно замедляет работу программы. Ниже приведены некоторые рекомендации по использованию исключений в программе.
- Исключение является признаком аварийной ситуации; не используйте исключения для простой передачи информации (мы видели программу, в которой при успешном завершении функции инициировалось исключение SUCCESS_EXCEPTION).
- Не заменяйте тривиальные проверки обработкой исключений. Например, исключения не стоит применять для проверки достижения конца файла (EOF).
- Избегайте раздробленной обработки исключений, при которой едва ли не каждая команда заключается в отдельный блок Try-Catch. Заключение всей операции в один блок Try-Catch обычно предпочтительнее использования нескольких блоков.
- Не поглощайте исключения конструкциями вида Catch e As Exception с пустым блоком команд, если для этого нет достаточно веских причин. Такая конструкция эквивалентна бездумному применению On Error Resume в старых программах VB, и пользоваться ею нежелательно по тем же причинам. Если в программе произошло исключение, обработайте его или передайте для дальнейшей обработки.
- Последнюю рекомендацию скорее можно назвать "правилом хорошего тона". Передавая исключение во внешний код для последующей обработки, добавьте в него новую информацию (или определите новый класс исключений), чтобы внешний код мог точно определить, что произошло и какие меры были приняты для того, чтобы исправить ситуацию.