2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Dartにおいてtry-catch構文でエラーハンドリングを行う際、

try {
    // 処理
} catch(Error e) { 
    // エラー処理
}

ではなく、

try {
    // 処理
} catch(e) { 
    // エラー処理
}

と書くのか疑問に思ったことはありませんか?

思いますよね。少なくとも私は思いました。
なので、調べてみた知見を共有しようと思います。

なぜcatch(e){ }なのか

これは、Dartの特性に由来するようで、Dartではnullでない全てのオブジェクトがthrowできるため、catch文に入ってくる例外はObject型になります。

したがって、エラー処理を行う際には特定のエラー型を指定するのではなく、catch(e)のように一般的な形式を使用することで、全ての例外をキャッチすることが可能となります。

これにより、例外がError型に限らず、他のオブジェクト型であっても柔軟にハンドリングできるのです。

例えばこんなコードを考えてみましょう

try {
    // 任意の処理
    throw 'これはエラーメッセージです';
} catch(e) {
    print(e);
}

この例では、文字列リテラルが例外として投げられています。

catchブロックで捕捉される例外はObject型であり、文字列リテラルもDartのObject型の一部であるため、正しく拾われ、エラーメッセージが表示されます。

image.png

このように、Dartではnullでない全てのオブジェクトがthrowできるという特性があるため、catchブロックではObject型の例外を受け取ることがデフォルトとなっているようです。

さいごに

Dartでのエラーハンドリングは、全てのオブジェクトが例外としてスローできて柔軟性があります。
この特性を知っているとちょっと開発がスムーズに進むかもしれません。

この記事が誰かのお役に立てれば幸いです。

それでは。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?