Dartのエラーと例外処理について

Flutterを使ったアプリ開発 Flutter

アサーション

コードを開発する際に想像もしていなかったバグに遭遇することがあります。このようなときに活躍するのがアサーションです。アサーションは、プログラムのある時点で満たされるべき条件を記述し、満たされていない場合は例外を発生させます。

アサーション&モード(Flutter)

Dartのコードを開発する際、想定通りに動いているかをチェックするためにアサーションを入れられます。その後ほとんどバグがなければ、同じコードをアサーションなしで実行することができます。

デバッグモードでFlutterを開発しても、ほぼ同様のことができます。

エラー&例外

なぜエラーや例外に対処するか

多くのソフトウェアシステムは、複雑で、何人かが協力して書いています。

複数のソースによる複雑さ:

  • ビジネスドメイン
  • ソフトウェアを書くこと
  • 複数の人が一緒に働き、それぞれが違う観点を持っていること
  • など

この複雑さが誤解を生み、エラーや例外につながるのです。コードによってこのエラーが扱えれば、それは大きな問題ではありません。

  • もしエラーや例外に対処しなかったら、予測不能の事態が起きた時にユーザはエラーの起きた場所を知る手段がなく、苦しむかもしれません。
  • もしエラーや例外に対処していれば、ユーザはエラーを知ることなくプログラムを使い続け、開発者が問題を見つけて直すことができます。

良いエラーや例外への対処は、技術的な専門用語でエンドユーザーをけむに巻くべきではありませんが、問題を追跡する開発者には十分な情報を与えなければなりません。

Dartプログラムを実行しているときに問題があれば、エラーや例外を投げることができます。エラーや例外が起きたとき通常のプログラムは停止し、異常終了します。

エラー

エラーは捕まえることも扱うこともできない深刻な問題です。

  • RageError : リストを検索する際に、無効なインデックスを使用しようとしている場合
  • OutOfMemoryError

例外

例外は、捕まえることも扱うこともできる、比較的深刻ではない問題です。

  • FormatException : 文字列の構文解析ができません

エラーの対処

エラーを修正することは不可能です。ではどのようにすれば少しでも有効なものになるでしょうか?

そこで行う最善策は、どこで、何が起こったか、など起こったことを記録することです。

例外の対処

アプリケーションが急に停止しないために、例外に対処する必要があります。そのために有効なのが、「try..catch..finally」です。finallyはなくても構いません。

Finally

Dartは、例外が出るかどうかにかかわらず、常にFinallyのブロックを実行します。

例外のCatch

まず、例外のCatchについてです。

次のコードは、例外をCatchし、それを出力します。

例外のCatchとスタックトレース

Catchについて、次はスタックトレースです。

次のコードは、例外とスタックトレースを取得し、スタックトレースを出力します。

特定の例外のCatch

特定の例外をCatchしたい場合には、「catch」の代わりに「on」を使います。そのあとに「catch」で、それ以外の例外をCatchすることもできます。

「catch(e)」を使うか、「catch(e, s)」を使うかは、スタックトレースを使うかによって分けてください。

例外のThrow

例外を投げるには「throw」というキーワードを用います。

例外のRethrow

例外をcatchした時に、それを次のレベルに投げる(rethrow)することができます。つまり、例外をcatchしてログを残し、その後また例外を投げてより高レベルで対処することができるのです。

例外を作る

自分でカスタムの例外を作るのはとても簡単です。

コンソールアウトプット

Dartでは、「print」コマンドを使ったときにコンソールが使われます。以下のことを覚えていてください。

  • printするときは、変数を「toString()」して文字列に変換します。
  • 出力のフォーマットには、文字列と特殊文字が使えます。
タイトルとURLをコピーしました