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....