0Pricing
Dart Academy · レッスン

カスタム例外とrethrow

意味のあるエラーを定義して再送出する

「カスタム例外とrethrow」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。

意味のあるエラー

一般的な例外では意図が分かりにくくなります。custom exceptionを使えば問題の内容を正確に名前で示せるため、アプリ全体でエラーを読み取りやすくできます。🏷️

Exceptionの実装

implements Exceptionを付けたクラスを作成します。これにより、そのクラスがDartと読み手の双方に認識される、throw可能なエラー型であることを示せます。

class PaymentException implements Exception {}

メッセージを持たせる

コンストラクターを通じてmessageフィールドを例外に持たせると、ハンドラーが発生理由を読み取れるようになります。

class PaymentException implements Exception {
  final String message;
  PaymentException(this.message);
}

分かりやすいtoString

toStringをオーバーライドすると、例外を出力したときにクラス名だけでなく、内容の分かりやすい文が表示されます。

@override
String toString() => 'PaymentException: $message';

独自の例外をthrowする

カスタム例外も組み込み例外とまったく同じようにthrowできます。ルール違反が起きたときに、新しいインスタンスをthrowしてください。

throw PaymentException('Card declined');

独自の型で捕捉する

組み込み型と同じようにon句を使って例外を捕捉し、そのケース専用の処理を行えます。

try {
  pay();
} on PaymentException catch (e) {
  print(e);
}

解決できないこともあります

ハンドラーはエラーを記録できても、解決まではできない場合があります。エラーを握りつぶす代わりに、rethrowで上位へ渡せます。

rethrowキーワード

rethrowは現在の例外をもう一度throwし、元のスタックトレースを保持します。そのため、呼び出し元は例外が実際に始まった場所を確認できます。

catch (e) {
  log(e);
  rethrow;
}

rethrowはthrow eより優先

throw eと書くとスタックトレースがリセットされますが、rethrowならそのまま保持されます。catch内で例外を再送出するときは、必ずrethrowを優先してください。

記録してから上へ渡す

よくあるパターンは、catchで失敗をlogに記録し、その後rethrowして、上位層に復旧方法を判断させることです。

catch (e) {
  logger.error(e);
  rethrow;
}

役立つフィールドを追加する

カスタム例外には、codeや失敗した値などの追加データを持たせられます。これにより、ハンドラーはより豊富な情報を使って処理できます。

class ApiException implements Exception {
  final int code;
  ApiException(this.code);
}

確認問題

catch内でthrow eではなくrethrowを使うのはなぜですか?

まとめ

これで、Exceptionを実装し、データを保持し、rethrowで失敗を適切に上位へ渡す意味のある例外を作れるようになりました。🚀

よくある質問

「カスタム例外とrethrow」レッスンは無料ですか?

はい。「カスタム例外とrethrow」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。

「カスタム例外とrethrow」で何を学びますか?

意味のあるエラーを定義して再送出する ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Dart Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「カスタム例外とrethrow」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDart Academyレッスンでコードを書いて実行できますか?

はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. throw、try、catch
  2. on句と例外型
  3. finallyと確実なクリーンアップ
  4. カスタム例外とrethrow
← Dart Academyに戻る