русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Обработка исключений

Что делать, если в процессе операций ввода/вывода возникла неординарная ситуация? Нап­ример, функция getChar обнаружила конец файла. В этом случае произойдет ошибка. Как и любой продвинутый язык программирования Haskell предлагает для этих целей ме­ха­низм обработки исключений. Для этого не используется какой-то специальный син­так­сис, но есть специальный тип IOError, который содержит описания всех возникаемых в про­цессе ввода/вывода ошибок.

Обработчик исключений имеет тип (IOError ® IO a), при этом функция catch ас­со­ци­и­ру­ет (свя­зывает) обработчик исключений с набором действий:

catch :: IO a -> (IOError -> IO a) -> IO a

Аргументами этой функции являются действие (первый аргумент) и обработчик ис­клю­че­ний (второй аргумент). Если действие выполнено успешно, то просто возвращается ре­зуль­тат без возбуждения обработчика исключений. Если же в процессе выполнения дей­с­т­вия возникла ошибка, то она передается обработчику исключений в качестве операнда ти­па IOError, после чего выполняется сам обработчик.

Таким образом, можно написать более сложные функции, которые будут грамотно вес­ти себя в случае выпадения ошибочных ситуаций:

getChar’ :: IO Char

getChar’ = getChar `catch` eofHandler

where eofHandler e = if isEOFError e then return ’\n’ else ioError e

getLine’ :: IO String

getLine’ = catch getLine’’ (\err -> return (”Error: ” ++ show err))

where getLine’’ = do c <- getChar’

if c == ’\n’ then return ””

else do l <- getLine’

return (c : l)

В этой программе видно, что можно использовать вложенные друг в друга обработчики ошибок. В функции getChar’ отлавливается ошибка, которая возникает при обнаружении сим­вола конца файла. Если ошибка другая, то при помощи функции ioError она от­прав­ля­ет­ся дальше и ловится обработчиком, который "сидит" в функции getLine’. Для оп­ре­де­лён­ности в Haskell’е предусмотрен обработчик исключений по умолчанию, который на­хо­дит­ся на самом верхнем уровне вложенности. Если ошибка не поймана ни одним об­ра­бот­чи­ком, который написан в программе, то её ловит обработчик по умолчанию, который вы­во­дит на экран сообщение об ошибке и останавливает программу.

Просмотров: 493


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.