Dartプログラミング-例外
例外(または例外イベント)は、プログラムの実行中に発生する問題です。例外が発生すると、プログラムの通常のフローが中断され、プログラム/アプリケーションが異常終了します。
組み込みのDart例外には次のものがあります-
シニア番号 | 例外と説明 |
---|---|
1 | DeferredLoadException 据え置きライブラリのロードに失敗した場合にスローされます。 |
2 | FormatException 文字列またはその他のデータの形式が予期されておらず、解析または処理できない場合にスローされる例外。 |
3 | IntegerDivisionByZeroException 数値がゼロで除算されたときにスローされます。 |
4 | IOException すべてのInupt-Output関連の例外の基本クラス。 |
5 | IsolateSpawnException 分離株を作成できない場合にスローされます。 |
6 | Timeout 非同期結果の待機中にスケジュールされたタイムアウトが発生した場合にスローされます。 |
Dartのすべての例外は、事前定義されたクラスのサブタイプです Exception。アプリケーションが突然終了するのを防ぐために、例外を処理する必要があります。
トライ/オン/キャッチブロック
ザ・ tryブロックには、例外が発生する可能性のあるコードが埋め込まれます。onブロックは、例外タイプを指定する必要がある場合に使用されます。ザ・catch ブロックは、ハンドラーが例外オブジェクトを必要とするときに使用されます。
ザ・ try ブロックの後には、1つだけが続く必要があります on / catch ブロックまたは1つ finallyブロック(または両方のいずれか)。tryブロックで例外が発生すると、制御はに転送されます。catch。
ザ・ syntax 例外を処理するための以下のとおりです-
try {
// code that might throw an exception
}
on Exception1 {
// code for handling exception
}
catch Exception2 {
// code for handling exception
}
以下は覚えておくべきいくつかのポイントです-
コードスニペットには、複数の例外を処理するために複数のon / catchブロックを含めることができます。
onブロックとcatchブロックは相互に包括的です。つまり、tryブロックはonブロックとcatchブロックの両方に関連付けることができます。
次のコードは、Dartでの例外処理を示しています。
例:ONブロックの使用
次のプログラムは、変数で表される2つの数値を除算します x そして yそれぞれ。コードはゼロによる除算を試みるため、例外をスローします。ザ・on block この例外を処理するためのコードが含まれています。
main() {
int x = 12;
int y = 0;
int res;
try {
res = x ~/ y;
}
on IntegerDivisionByZeroException {
print('Cannot divide by zero');
}
}
次のようになります output −
Cannot divide by zero
例:catchブロックの使用
次の例では、上記と同じコードを使用しています。唯一の違いは、catch block(ONブロックの代わりに)ここには、例外を処理するためのコードが含まれています。のパラメータcatch 実行時にスローされる例外オブジェクトが含まれます。
main() {
int x = 12;
int y = 0;
int res;
try {
res = x ~/ y;
}
catch(e) {
print(e);
}
}
次のようになります output −
IntegerDivisionByZeroException
例:on…catch
次の例は、の使用方法を示しています。 on...catch ブロック。
main() {
int x = 12;
int y = 0;
int res;
try {
res = x ~/ y;
}
on IntegerDivisionByZeroException catch(e) {
print(e);
}
}
次のようになります output −
IntegerDivisionByZeroException
最後にブロック
ザ・ finallyブロックには、例外の発生に関係なく実行する必要のあるコードが含まれています。オプションfinally ブロックはその後無条件に実行されます try/on/catch。
を使用するための構文 finally ブロックは次のとおりです-
try {
// code that might throw an exception
}
on Exception1 {
// exception handling code
}
catch Exception2 {
// exception handling
}
finally {
// code that should always execute; irrespective of the exception
}
次の例は、 finally ブロック。
main() {
int x = 12;
int y = 0;
int res;
try {
res = x ~/ y;
}
on IntegerDivisionByZeroException {
print('Cannot divide by zero');
}
finally {
print('Finally block executed');
}
}
次のようになります output −
Cannot divide by zero
Finally block executed
例外をスローする
ザ・ throwキーワードは、明示的に例外を発生させるために使用されます。プログラムが突然終了するのを防ぐために、発生した例外を処理する必要があります。
ザ・ syntax 明示的に例外を発生させるための-
throw new Exception_name()
例
次の例は、の使用方法を示しています。 throw 例外をスローするキーワード-
main() {
try {
test_age(-2);
}
catch(e) {
print('Age cannot be negative');
}
}
void test_age(int age) {
if(age<0) {
throw new FormatException();
}
}
次のようになります output −
Age cannot be negative
カスタム例外
上で指定したように、Dartのすべての例外タイプは組み込みクラスのサブタイプです Exception。Dartを使用すると、既存の例外を拡張してカスタム例外を作成できます。カスタム例外を定義するための構文は次のとおりです。
構文:例外の定義
class Custom_exception_Name implements Exception {
// can contain constructors, variables and methods
}
カスタム例外は明示的に発生させる必要があり、同じことがコードで処理される必要があります。
例
次の例は、カスタム例外を定義して処理する方法を示しています。
class AmtException implements Exception {
String errMsg() => 'Amount should be greater than zero';
}
void main() {
try {
withdraw_amt(-1);
}
catch(e) {
print(e.errMsg());
}
finally {
print('Ending requested operation.....');
}
}
void withdraw_amt(int amt) {
if (amt <= 0) {
throw new AmtException();
}
}
上記のコードでは、カスタム例外を定義しています。 AmtException。渡された量が例外範囲内にない場合、コードは例外を発生させます。ザ・main 関数は、関数の呼び出しを try...catch ブロック。
コードは次を生成する必要があります output −
Amount should be greater than zero
Ending requested operation....