【 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
や「非チェック例外」なんて読者わかるのでしょうか・・・。
中級者向けなので問題ないでしょうかね😅
今日はここまで!
ディスカッション
コメント一覧
まだ、コメントがありません