322______________________________________________Глава 4

Обработка исключений, на каком бы механизме она не основывалась, позволя-
ет исключить из программ множество предварительных проверок перед выполне-
нием отдельных операций, делает код более компактным и ясным, повышает «бе-
зошибочность» работы.

В заключение хотелось бы предостеречь от применения обработки исключе-
ний для целей, отличных от обработки ошибок, потому что это может уменьшить
ясность программы (все, сказанное ниже не относится к EAbort). Конечно, ничто
не мешает использовать обработку исключений как один из инструментов измене-
ния потока управления, т.е. как способ передачи управления из одной точки про-
граммы в другую. Но такое использование обработки исключений существенно за-
путывает программу и гораздо хуже, чем даже применение оператора goto, кото-
рый многие ругают (хотя автор данной книги не разделяет возмущения операто-
ром goto — во многих случаях он не только не запутывает программу, но и делает
ее более стройной и понятной). В отличие от goto, передающего управление в обо-
значенную точку программы, генерация исключения передает управление неизве-
стно куда (если только не используется в небольшом блоке try-catch). К тому же
программы транслируются таким образом, что, когда исключение не возникает,
присутствие кода обработки исключений не вносит никаких дополнительных из-
держек (или они очень невелики). Когда же исключения генерируются, они вле-
кут за собой накладные расходы во время выполнения. Если это кончается выда-
чей пользователю какой-то информации и остановом программы, то эти наклад-
ные расходы не имеют значения. Но если использовать обработку исключений
просто для передачи управления, то это заметно скажется на эффективности про-
граммы.