Обработка ошибок в ActionScript 3.0

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

Поскольку многие приложения могут работать без создания логики обработки ошибок, некоторые разработчики не спешат встраивать средства обработки ошибок в свои программы. Тем не менее, без обработки ошибок приложение легко может «зависнуть» или разочаровать пользователя, если не будет работать так, как ожидалось. ActionScript 2.0 имеет класс Error, позволяющий встроить логику в пользовательские функции для генерации исключения со специальным сообщением. Поскольку обработка ошибок является критическим условием для создания удобного для пользователя приложения, ActionScript 3.0 включает в себя расширенную архитектуру перехвата ошибок.

Примечание. Хотя в справочнике ActionScript® 3.0 для платформы ® Flash® Platform перечислены исключения, выдаваемые многими методами, этот список может включать не все возможные исключения для каждого из них. Метод может генерировать исключения, связанные с ошибками синтаксиса или с другими проблемами, которые не указаны явно в описании метода, даже если в этом описании приводится список исключений, отправляемых методом.

Элементы обработки ошибок в ActionScript 3.0

В ActionScript 3.0 используются многочисленные инструменты обработки ошибок, перечисленные ниже.

  • Классы Error. ActionScript 3.0 включает большой набор классов Error, которые расширяют спектр ситуаций, создающих объекты ошибок. Каждый класс Error помогает приложению обрабатывать специфические состояния ошибки. Эти состояния могут относится к ошибкам системы (например, состояние MemoryError), к ошибкам кода (например, состояние ArgumentError), к ошибкам сети и коммуникации (например, состояние URIError) или к другим ошибкам. Для получения дополнительной информации по каждому классу см. раздел Сравнение классов ошибок .

  • Уменьшение количества скрытых сбоев. В ранних версиях Flash Player ошибки генерировались и сообщались только в том случае, когда явно использовалась инструкция throw . В Flash Player 9 и в более поздних версиях среды выполнения Flash собственные методы и свойства ActionScript выдают ошибки времени выполнения. Эти ошибки позволяют более эффективно обрабатывать исключения по мере возникновения, а затем отвечать на каждое из них по отдельности.

  • В процессе отладки появляются точные сообщения об ошибках. В отладочных версиях среды выполнения Flash проблемные коды и ситуации генерируют обстоятельные сообщения об ошибках, которые дают возможность легко определить причины сбоя в конкретном блоке кода. Эти сообщения позволяют более эффективно исправлять ошибки. Дополнительные сведения см. в разделе « Работа с отладочными версиями сред выполнения Flash ».

  • Четкое определение ошибок позволяет передавать пользователям точные сообщения об ошибках. В ранних версиях Flash Player метод FileReference.upload() возвращал логическое значение false , если вызов метода upload() был неуспешным, указывая при этом одну из пяти возможных ошибок. Если ошибка происходит при вызове метода upload() в ActionScript 3.0, предусмотрено четыре специфические ошибки, которые позволяют отображать более точные сообщения об ошибках для конечного пользователя.

  • Точная обработка ошибок. Для многих стандартных ситуаций генерируются четко определенные ошибки. Например, в ActionScript 2.0 перед заполнением объекта FileReference свойство name имеет значение null (таким образом, перед использованием или отображением свойства name необходимо удостовериться, что это значение не установлено как null ). В ActionScript 3.0 при попытке доступа к свойству name перед тем, как оно было заполнено, Flash Player или AIR генерирует сообщение IllegalOperationError, которое информирует о том, что значение не было задано, так что для обработки ошибки можно использовать блоки try..catch..finally . Дополнительные сведения см. в разделе Использование инструкций try..catch..finally .

  • Отсутствие существенного снижения производительности. Использование для обработки ошибок блоков try..catch..finally требует значительно меньше дополнительных ресурсов по сравнению с предыдущими версиями ActionScript.

  • Класс ErrorEvent позволяет создавать прослушивателей для специфических событий асинхронных ошибок. Для получения подробной информации см. раздел Ответы на события ошибок и ошибки состояния .

Стратегия обработки ошибок

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

Существует несколько подходов к вопросу обработки ошибок в приложении. Ниже перечислены три основных способа обработки ошибок.

  • Использование инструкций try..catch..finally . Они позволяют перехватывать синхронные ошибки при их возникновении. Инструкции можно расположить в иерархическом порядке, чтобы перехватывать исключения на различных уровнях выполнения кода. Дополнительные сведения см. в разделе Использование инструкций try..catch..finally .

  • Создание пользовательских объектов ошибок. Для контроля специфических операций приложения, не предусмотренных встроенными типами ошибок, можно использовать класс Error с целью создания собственных объектов ошибок. После этого можно будет использовать инструкции try..catch..finally совместно с созданными объектами ошибок. Для получения дополнительной информации см. раздел Создание пользовательских классов ошибок .

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