モバイルアプリにおける高度なエラー処理機能

MobileTogether 2.1には、モバイルアプリケーション向けの新しい「Try/Throw」と「Catch」エラー処理機能が追加されました。これにより、開発者は、エンドユーザーエクスペリエンスを向上させる、高度なエラー処理ルーチンを構築できるようになります。例えば、アプリケーションがサードパーティのWebサービスに接続しようとした際に、サーバーが利用できない場合でも、エラー処理機能によって、スムーズな復旧が可能になります。

MobileTogetherのモバイルアプリ向けエラー処理機能は、すべてのプラットフォームで同じように動作するため、開発者は各モバイルオペレーティングシステムの要件に合わせてエラー処理をカスタマイズする必要がなく、開発時間を大幅に節約できます。

以前の記事「モバイルアプリのためのデータソースとしてのRESTサービス」では、USGSが提供するRESTサービスを呼び出し、地理座標に基づいて正確な標高値を取得するデモアプリを使用しました。

RESTサービスを実行する際に発生する可能性のある、異なる種類の2つのエラーを処理するために、Try/Catch構文を使用することができます

  • USGSサーバーとの接続で、エラーが発生する可能性があります
  • 提供された座標に対して、USGS(米国地質調査局)が標高データを持っていないことを示す、-1000000という標高値が返ってくる可能性があります

以下のように、RESTサービスへの呼び出し全体と、それに続くデータ操作処理を、tryブロックの中に記述することができます

ウェブサービスへの接続が失敗した場合、Tryアクション内のそれ以降のすべての処理が中断されます。もしUSGS(米国地質調査局)からデータが取得できない場合、上記で強調されている「ノードの更新」処理を実行する意味はありません。この例では、1つの処理が中断されますが、Tryアクションの中に複数の処理、処理グループ、あるいは他の処理グループを呼び出す処理グループを配置することも可能です。

同様に、"Catch"アクションも、エラーが発生した場合にのみ実行される複数の操作を実行できます。上記のスクリーンショットでは、"Catch"アクションが、接続エラーが発生したことを示すメッセージボックスを表示し、さらに、範囲外エラーの場合にUSGSが提供するのと同じ標高値を使用して、ノードの更新を行います。もちろん、"Try"と同様に、"Catch"アクションの中に複数のアクション、アクショングループ、または他のアクショングループを呼び出すアクショングループを配置することも可能です。

モバイルアプリにおける、より高度なフロー制御と、エラー発生時の対応機能

モバイルアプリケーションがより複雑なプログラムロジックを必要とするようになると、try/catch/throwによるエラー処理の真価が発揮され始めます。

あるアクショングループが、データベース操作やWebサービスへの呼び出しなど、一連の処理を含んでいる場合を考えてください。これらの処理はすべて順番に実行する必要があり、それぞれの処理が前の処理の成功に依存しているとします。このような場合、各ステップの結果をif-else文で確認するのは非常に煩雑になります。代わりに、データベース操作でエラーが発生した場合に例外を発生させるように定義し、最後にまとめてエラーを表示する処理を記述することで、よりシンプルでエレガントなコードを実現できます。

このスクリーンショットは、米国の公開企業の財務報告書を、証券取引委員会(SEC)のEDGARデータベースに格納されているXBRL形式のデータから自動的に抽出するモバイルアプリケーションにおける、try/catch構文の使用例を示しています。このアプリケーションを使用することで、ユーザーはこれらの財務報告書を簡単に閲覧・分析することができます

もし5つのデータベースクエリのいずれかが失敗した場合、エラーが発生し、Tryブロック内の残りの処理はスキップされます。そして、エラーメッセージを保持している変数が、どのクエリが失敗したかを報告します。

ネストされたtry-catchによるエラー処理

エラーハンドリングの仕組みとして、あるアクショングループでtry/catchブロックを定義し、別のサブアクショングループでエラーを発生させ、そのサブアクショングループをメインのアクションから呼び出すことができます。実際には、この構造を深くネストすることも可能で、エラーが発生する場所は、メインアクションから何度かネストされたアクションの中に存在する可能性があります。

その時点で、制御は直接、外側のエラーハンドラのキャッチブロックに戻り、そこでエラーが処理されます。これは、他のプログラミング言語におけるtry/catch/throw構文が動作するのと全く同じ仕組みです。

MobileTogether Designerは、モバイルアプリケーション向けのtry/catch/throwによるエラー処理機能を備えており、無料で利用できます 今すぐダウンロードしてください!