Dプログラミング-例外処理

例外は、プログラムの実行中に発生する問題です。AD例外は、ゼロ除算の試行など、プログラムの実行中に発生する例外的な状況への応答です。

例外は、プログラムのある部分から別の部分に制御を移す方法を提供します。D例外処理は、3つのキーワードに基づいて構築されていますtrycatch、および throw

  • throw−問題が発生すると、プログラムは例外をスローします。これは、throw キーワード。

  • catch−プログラムは、問題を処理したいプログラム内の場所で例外ハンドラーを使用して例外をキャッチします。ザ・catch キーワードは、例外のキャッチを示します。

  • try − a tryblockは、特定の例外がアクティブ化されるコードのブロックを識別します。その後に1つ以上のキャッチブロックが続きます。

ブロックが例外を発生させると仮定すると、メソッドは、との組み合わせを使用して例外をキャッチします。 try そして catchキーワード。例外を生成する可能性のあるコードの周囲にtry / catchブロックが配置されます。try / catchブロック内のコードは保護されたコードと呼ばれ、try / catchを使用するための構文は次のようになります。

try { 
   // protected code 
} 
catch( ExceptionName e1 ) { 
   // catch block 
} 
catch( ExceptionName e2 ) { 
   // catch block 
} 
catch( ExceptionName eN ) { 
   // catch block 
}

複数のリストを作成できます catch さまざまなタイプの例外をキャッチするステートメント try ブロックは、さまざまな状況で複数の例外を発生させます。

Dで例外をスローする

例外は、を使用してコードブロック内のどこにでもスローできます。 throwステートメント。throwステートメントのオペランドは、例外のタイプを決定し、任意の式にすることができ、式の結果のタイプによって、スローされる例外のタイプが決まります。

次の例では、ゼロ除算条件が発生すると例外がスローされます-

double division(int a, int b) { 
   if( b == 0 ) { 
      throw new Exception("Division by zero condition!"); 
   }
   
   return (a/b); 
}

Dで例外をキャッチする

ザ・ catch 次のブロック tryブロックは例外をキャッチします。キャッチする例外のタイプを指定できます。これは、キーワードcatchに続く括弧内に表示される例外宣言によって決定されます。

try { 
   // protected code 
} 

catch( ExceptionName e ) { 
   // code to handle ExceptionName exception 
}

上記のコードは、 ExceptionNameタイプ。catchブロックがtryブロックでスローされるあらゆるタイプの例外を処理するように指定する場合は、次のように、例外宣言を囲む括弧の間に省略記号、...を挿入する必要があります。

try { 
   // protected code 
} 

catch(...) { 
   // code to handle any exception 
}

次の例では、ゼロ除算の例外がスローされます。キャッチブロックに引っ掛かっています。

import std.stdio; 
import std.string;
  
string division(int a, int b) { 
   string result = "";  
   
   try {  
      if( b == 0 ) {
         throw new Exception("Cannot divide by zero!"); 
      } else { 
         result = format("%s",a/b); 
      } 
   } catch (Exception e) { 
      result = e.msg; 
   }
   
   return result; 
} 
 
void main () { 
   int x = 50; 
   int y = 0;  
   
   writeln(division(x, y));  
   
   y = 10; 
   writeln(division(x, y)); 
}

上記のコードをコンパイルして実行すると、前のセクションで作成したファイルが読み取られ、次の結果が生成されます。

Cannot divide by zero!
5