スタッフブログ

STAFF BLOG

アプリ開発日誌

2021.08.06

Flutter開発のためのDart入門(5)例外

Dart_programming_language_logo

例外

前回のDart入門(4)の投稿に続き、今回もDartについて解説していきます。

今回は例外について解説します。

プログラムには予期せぬエラーが発生する場合があります。(数字が入力される想定が数字以外が入力されたときや通信エラーなど)

それを例外と呼び、発生した場合はプログラムが急に終了してしまいます。
(例外が発生することを「例外がスロー(throw)される」といいます)

プログラムを動かし続けるには例外がスロー(発生)された際に、異常終了を防がなければなりません。

そこで例外が起きた場合の対処を記述して、指定した動作をさせるための仕組みがDartには用意されています

それが例外処理と呼ばれるものです。
これによりプログラムは例外が発生しても終了せず継続して動き続けます。
例外処理には以下の構文があります。

throw

throwを使うことで例外を発生させることができます。
例外として渡すのは通常、ExceptionクラスやErrorクラスのサブタイプです。
※クラス、サブタイプについては今後の投稿で説明します。
次のコードは例外を発生させる例です。

void main() {
  print('throw Exception');
  throw Exception();
  print('not executed');
}

実行結果

throw Exception
Uncaught Error: Exception

ExceptionクラスやErrorクラス以外をthrowすることもできます。

void main() {
  print('throw String');
  throw 'throw String';
  print('not executed');
}

実行結果

throw String
Uncaught Error: throw String

try-catch

try – catchを使った例外処理の構文は次のようになります。

try {

  例外が発生しそうな処理

} catch () {

  例外が発生したときの処理

}
void main() {
  try {
    print('1stTry');
    throw Exception();
    print('2ndTry');
  } catch (e) {
    print('Catch');
    print(e);
  }
}

実行結果

1stTry
Catch
Exception

try内の処理で例外がthrowされた場合、catchに入ります。

try内で発生する可能性のある例外が複数ある場合に対処するため、catchブロックは複数定義できます。

任意の型だけをcatchしたい場合は、onを使います。

catchの第1引数にはthrowされた例外が、第2引数にはStackTrace(※スタックトレース)が格納されます。

※スタックトレースとはメモリのスタック領域の内容です

catchした例外を再度throwしたい場合はrethrowを使います。

finally

例外がスローされるかどうかに関わらず、必ず実行したい処理を記述するには、 finallyブロック内に定義します。

try {
  // ···
  } on Exception catch (e) {
    print('Exception details:\n $e');
  } catch (e, s) {
    print('Exception details:\n $e');
    print('Stack trace:\n $s');
    rethrow;
  } finally {
  // 必ず実行したい処理
}

次回はクラスについて投稿する予定です。

ライタープロフィール

【N】
Webエンジニアの経験を経て、アプリエンジニアとしてEDAに入社。
Flutter開発導入のファシリテーターとして、勉強会などを担当している。

BACK

お問合せ

イーディーエーに興味をお持ちいただいて
ありがとうございます!
スマホアプリに関するご相談、
お見積りや弊社へのご質問など、
お気軽にお問い合わせください。
担当者より折り返しご連絡させていただきます。

    お名前必須
    会社名
    メールアドレス必須
    電話番号必須
    お問合わせ種別必須
    お問合わせ内容必須

    アンケートにご協力ください。
    弊社サイトへはどのようにしてアクセスされましたか?

    個人情報のお取扱いに関する同意事項

    1.事業者の氏名又は名称

    株式会社イーディーエー

    2.個人情報保護管理者の氏名又は職名、所属及び連絡先

    個人情報保護管理者 小宮 保人
    Mail:[email protected]

    3.取得した個人情報の利用目的

    当フォームで取得した個人情報は、お問い合わせに関する回答のために利用し、目的外利用はいたしません。

    4.弊社が取得した個人情報の第三者への委託、提供について

    弊社は、ご本人に関する情報をご本人の同意なしに第三者に委託または提供することはありません。

    5.個人情報保護のための安全管理

    弊社は、ご本人の個人情報を保護するための規程類を定め、従業者全員に周知・徹底と啓発・教育を図るとともに、その遵守状況の監査を定期的に実施いたします。
    また、ご本人の個人情報を保護するために必要な安全管理措置の維持・向上に努めてまいります。

    6.個人情報の開示・訂正・利用停止等の手続

    ご本人が、弊社が保有するご自身の個人情報の、利用目的の通知、開示、内容の訂正、追加又は削除、利用の停止、消去及び第三者への提供の停止を求める場合には、下記に連絡を頂くことで、対応致します。

    株式会社イーディーエー 個人情報お問合せ窓口
    〒106-0032 東京都港区六本木7丁目14番23 ラウンドクロス六本木4F
    TEL:03-5422-7524 FAX:03-5422-7534
    Mail:[email protected]

    7.ご提供いただく情報の任意性

    個人情報のご提供は任意ですが、同意を頂けない場合には、第3項にあります利用目的が達成できない事をご了承いただくこととなります。

    8.弊社Webサイトの運営について

    弊社サイトでは、ご本人が弊社Webサイトを再度訪問されたときなどに、より便利に閲覧して頂けるよう「クッキー(Cookie)」という技術を使用することがあります。これは、ご本人のコンピュータが弊社Webサイトのどのページに訪れたかを記録しますが、ご本人が弊社Webサイトにおいてご自身の個人情報を入力されない限りご本人ご自身を特定、識別することはできません。
    クッキーの使用を希望されない場合は、ご本人のブラウザの設定を変更することにより、クッキーの使用を拒否することができます。その場合、一部または全部のサービスがご利用できなくなることがあります。