Dart:
エラーの処理
どのようにして:
Dartは、コンパイル時 エラーと 実行時 エラーの2種類のエラーをサポートしています。コンパイル時エラーはコードが実行される前にDart解析器によって検出されますが、実行時エラーまたは例外は実行中に発生します。Dartで例外を処理する方法は次のとおりです:
Try-Catch
アプリケーションがクラッシュするのを防ぐために、try-catch
を使用して例外を捕捉します:
try {
var result = 100 ~/ 0; // 0での割り算を試みると、例外がスローされる
} catch (e) {
print('例外を捕捉しました: $e'); // 例外を処理する
}
出力例: 例外を捕捉しました: IntegerDivisionByZeroException
特定の例外
特定の例外を処理するには、catch
の後に例外を記述します:
try {
var result = 100 ~/ 0;
} on IntegerDivisionByZeroException {
print('0で割ることはできません。'); // 0での割り算例外を特別に処理します
}
出力例: 0で割ることはできません。
スタックトレース
デバッグ用のスタックトレースを取得するには、catchブロックに二番目のパラメータを使用します:
try {
var result = 100 ~/ 0;
} catch (e, s) {
print('例外: $e');
print('スタックトレース: $s'); // デバッグのためのスタックトレースを印刷する
}
Finally
例外がスローされたかどうかに関わらず、try/catchの後にコードを実行するには、finally
を使用します:
try {
var result = 100 ~/ 0;
} catch (e) {
print('例外を捕捉しました: $e');
} finally {
print('これは常に実行されます。'); // クリーンアップコードや最終ステップ
}
出力例:
例外を捕捉しました: IntegerDivisionByZeroException
これは常に実行されます。
サードパーティライブラリ
Dartのコアライブラリはエラー処理に対して堅牢ですが、dartz
のようなサードパーティパッケージを使用して、Either
やOption
などの概念を導入し、エラー処理に使用することもできます。これは、エラー処理にdartz
を使用する例です:
- 依存関係の下に
dartz
をpubspec.yaml
ファイルに追加してください:
dependencies:
dartz: ^0.10.0
- Dartコード内でエラーをうまく処理するために
Either
を使用します:
import 'package:dartz/dartz.dart';
Either<String, int> divide(int dividend, int divisor) {
if (divisor == 0) {
return Left('0で割ることはできません。');
} else {
return Right(dividend ~/ divisor);
}
}
void main() {
final result = divide(100, 0);
result.fold(
(left) => print('エラー: $left'),
(right) => print('結果: $right')
);
}
出力例: エラー: 0で割ることはできません。
Left
部分は通常、エラーを表し、Right
部分は成功を表します。このパターンは、エラーをより機能的な方法で処理することを可能にし、エラー管理における明確性と制御を提供します。