D Programlama - Özel Durum İşleme

İstisna, bir programın yürütülmesi sırasında ortaya çıkan bir sorundur. AD istisnası, sıfıra bölme girişimi gibi bir program çalışırken ortaya çıkan istisnai bir duruma verilen yanıttır.

İstisnalar, kontrolü bir programın bir bölümünden diğerine aktarmanın bir yolunu sağlar. D istisna işleme, üç anahtar sözcük üzerine kurulmuşturtry, catch, ve throw.

  • throw- Bir program, bir sorun ortaya çıktığında bir istisna atar. Bu, birthrow anahtar kelime.

  • catch- Bir program, bir programda sorunu çözmek istediğiniz yerde bir istisna işleyicisiyle bir istisna yakalar. catch anahtar kelime, bir istisnanın yakalandığını gösterir.

  • try - bir tryblok, belirli istisnaların etkinleştirildiği bir kod bloğunu tanımlar. Bunu bir veya daha fazla yakalama bloğu izler.

Bir bloğun bir istisna oluşturacağını varsayarsak, bir metot, try ve catchanahtar kelimeler. Bir istisna oluşturabilecek kodun etrafına bir dene / yakala bloğu yerleştirilir. Bir dene / yakala bloğundaki kod korumalı kod olarak adlandırılır ve dene / yakala kullanımının sözdizimi aşağıdaki gibi görünür -

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

Birden fazla listeleyebilirsiniz catch farklı türdeki istisnaları yakalamak için try blok, farklı durumlarda birden fazla istisna yaratır.

D'de İstisnalar Atmak

İstisnalar, bir kod bloğu içinde herhangi bir yere atılabilir. throwifadeler. Throw ifadelerinin işleneni, istisna için bir tür belirler ve herhangi bir ifade olabilir ve ifadenin sonucunun türü, atılan istisnanın türünü belirler.

Aşağıdaki örnek, sıfır durumuna bölme gerçekleştiğinde bir istisna atar -

Misal

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

D'de İstisnaları Yakalama

catch takip eden blok tryblok herhangi bir istisnayı yakalar. Ne tür bir istisna yakalamak istediğinizi belirtebilirsiniz ve bu, catch anahtar sözcüğünden sonra parantez içinde görünen istisna bildirimiyle belirlenir.

try { 
   // protected code 
} 

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

Yukarıdaki kod bir istisnayı yakalar ExceptionNameyazın. Bir catch bloğunun bir try bloğunda atılan herhangi bir istisna türünü işlemesi gerektiğini belirtmek istiyorsanız, istisna bildirimini içeren parantezlerin arasına aşağıdaki gibi bir üç nokta, ... koymalısınız -

try { 
   // protected code 
} 

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

Aşağıdaki örnek, sıfır istisnasına göre bir bölme atar. Yakalama bloğunda yakalanır.

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)); 
}

Yukarıdaki kod derlendiğinde ve çalıştırıldığında, önceki bölümde oluşturulan dosyayı okur ve aşağıdaki sonucu verir -

Cannot divide by zero!
5