【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part12 例外

基礎 から 学ぶ Flutter 」という書籍で  学習 したことを ブログでアウトプットしていこうと思います。今回は Dart編 ( part12 )です。

前回

【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part11 例外

今回も例外です。構文を確認していきます。

例外

例外はすべて「非チェック例外」になります。

非チェック例外???

これは私の解釈となりますが、呼び出し側は後述するtry-catchで捕まえなくても問題がないという例外になります。
対語として「チェック例外」があります。こちらはtry-catchが「必須」となります。
Dartではこの「チェック例外」という概念が無いので呼び出し先で例外の記述があっても「キニシナイ(try-catchしない)」という
ことができるということですね。
※もちろんプログラムは終了してしまうでしょうが・・・

throw

throw式?によって例外を発生させることができます。

throwに渡せるオブジェクト

DartではExceptionというクラスがエラークラスの親玉のようです。
しかし!Exceptionクラスに属さないオブジェクトであってもthrowの引数として使用できます。

以下のような実装も問題ありません。

throw 'Out of Index!';

try-catch-finally

try内で発生した例外(throw)はcatchで受け止めます。
特定の型だけcatchしたい場合はon句を使います。
finallyは例外の発生有無は関係なく必ず実行さえます。

void main() {
  try{
    // any code
  } on Exception catch(e){
    // 特定の例外をcatchする場合は
    // on {クラス名} catch(e) と実装する
    
    print(e);
  } catch (e, s) {
    // 例外すべてを受け取る場合はon句は不要
    
    // throwされたオブジェクト
    print(e);
    
    // 処理の軌跡
    print(s);
    
    // さらに上位の呼び出し元に投げる
    rethrow;
  } finally {
    // このブロックは例外の有無関係なく処理が行われる
    print("最後の処理");
  }
}

catchの引数

  • 第一引数・・・throwされたオブジェクト
  • 第二引数・・・StackTrace(処理過程が保存されたオブジェクト)

再スロー

catch後、またthrowする場合はrethrowを使います。

最後に

例外処理はとても重要だと思うのですが本書はものすごくさらっと終わってしまいました(笑
ページ数の問題だろうとは思うのですがIsolateや「非チェック例外」なんて読者わかるのでしょうか・・・。
中級者向けなので問題ないでしょうかね😅

今日はここまで!