ActionScript 3.0 におけるエラー処理

Flash Player 9 以降、Adobe AIR 1.0 以降

多くの場合、エラーを処理するためのロジックを構築しないままアプリケーションを実行できるので、開発者はエラー処理をアプリケーションに組み入れることを後回しにする傾向があります。 ただし、エラー処理がないと、何らかの要素が予想どおりに動作しない場合に、アプリケーションが簡単に機能を停止したり、ユーザーの作業を妨げたりする可能性があります。ActionScript 2.0 の Error クラスでは、特定のメッセージで例外をスローするためのロジックを独自の関数に組み入れることができました。 エラー処理はユーザーフレンドリーなアプリケーションを作成する上で非常に重要であるため、ActionScript 3.0 ではエラーキャッチのために拡張アーキテクチャを追加しました。

注意: Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド 』では、様々なメソッドがスローする例外について説明していますが、各メソッドのすべての例外が記載されているとは限りません。メソッドがスローする例外の一部はメソッドの説明に記載されている場合でも、説明に明示的に記載されていないシンタックスエラーなどの問題について例外がスローされる場合もあります。

ActionScript 3.0 のエラー処理要素

ActionScript 3.0 では、次のような数多くのエラー処理用ツールを導入しています。

  • Error クラス: ActionScript 3.0 には、エラーオブジェクトを生成する可能性がある状況の範囲を拡張するための幅広い Error クラスがあります。システムエラー(MemoryError 状態など)、コーディングエラー(ArgumentError 状態など)、ネットワークおよび通信のエラー(URIError 状態など)、あるいはその他の状況のいずれであっても、アプリケーションが特定のエラー状態を処理しそれに応答するのに役立つ Error クラスがそれぞれに用意されています。 各クラスについて詳しくは、 Error クラスの比較 を参照してください。

  • 説明のない異常終了の減少 : Flash Player の以前のバージョンでは、エラーは明示的に throw ステートメントを使用した場合にしか生成および報告されませんでした。Flash Player 9 以降の Flash ランタイムでは、ActionScript のネイティブなメソッドおよびプロパティでランタイムエラーがスローされます。ランタイムエラーによって、これらの例外が発生した場合により効果的に処理し、各例外に対して個別に対応できるようになりました。

  • デバッグ中に表示されるエラーメッセージの明確化 : デバッガーバージョンの Flash ランタイムを使用すると、コードまたは状況に問題があるときに明確な内容を示すエラーメッセージが表示されるので、特定のコードブロックで異常が発生した原因を容易に特定できます。これらのメッセージによって、より効果的にエラーを解決できます。詳しくは、 デバッガーバージョンの Flash ランタイムの操作 を参照してください。

  • ユーザーに表示されるエラーメッセージの改良:Flash Player の以前のバージョンでは、 upload() の呼び出しに失敗すると FileReference.upload() メソッドから Boolean 型の戻り値で false が返されましたが、その場合に考えられるエラーは 5 つありました。ActionScript 3.0 では、 upload() メソッドの呼び出し時にエラーが発生すると、4 種類の特定のエラーを使用して、より正確なエラーメッセージをエンドユーザーに表示できます。

  • エラー処理の再定義 : 別個のエラーが多くの一般的な状況でスローされます。 例えば、ActionScript 2.0 では、FileReference オブジェクトに値を設定するまで、 name プロパティの値は null なので、 name プロパティを使用したり表示したりする前に、値が設定されていて null でないことを確認する必要があります。ActionScript 3.0 では、FileReference オブジェクトの値が設定される前に name プロパティにアクセスしようとすると、値が未設定であることを示す IllegalOperationError 例外がスローされ、 try..catch..finally ブロックを使用してエラーを処理することができます。詳しくは、 try..catch..finally ステートメントの使用 を参照してください。

  • 従来とほとんど変わらないパフォーマンス : try..catch..finally ブロックによるエラー処理に必要なリソース量は、ActionScript の以前のバージョンと同等またはわずかに増加する程度に抑えられています。

  • ErrorEvent クラス : このクラスを使用すると、特定の非同期エラーイベントにリスナーを構築することができます。 詳しくは、 エラーイベントおよびステータスへの応答 を参照してください。

エラー処理のアプローチ

問題のある状況が生じない限り、コードにエラー処理ロジックが組み込まれていなくても、アプリケーションは正常に動作し続けることができます。しかし、積極的なエラー処理がないと、アプリケーションで問題が発生しても、ユーザーはその原因を知ることができません。

いろいろな方法によってアプリケーションでエラー処理にアプローチすることができます。 エラー処理の主要な 3 つの方法の概略を次に示します。

  • try..catch..finally ステートメントの使用:これらのステートメントは、発生する同期エラーをキャッチします。各種レベルのコード実行で例外をキャッチするために、ステートメントを階層にネストすることができます。 詳しくは、 try..catch..finally ステートメントの使用 を参照してください。

  • 独自のカスタムエラーオブジェクトの作成 : Error クラスを使用して、ビルトインのエラーの種類が扱わない特定の操作をアプリケーションで追跡するために、独自のカスタムエラーオブジェクトを作成することができます。 これにより、カスタムエラーオブジェクトで try..catch..finally ステートメントを使用できます。詳しくは、 カスタムエラークラスの作成 を参照してください。

  • エラーイベントに応答するイベントリスナーおよびハンドラーの記述 : この方法を採用すると、 try..catch..finally ブロックのコードをいろいろな場所に記述することなく、グローバルなエラーハンドラーを作成して類似するイベントを処理できます。また、このアプローチを使用すると非同期エラーをキャッチする可能性が高くなります。 詳しくは、 エラーイベントおよびステータスへの応答 を参照してください。