Program geliştirirken meydana gelebilecek hatalar olabilir. Bilindiği üzere test süreci program yazım aşamalarında baştan sona çalıştırdığınız ve en çok zaman alan bir aşamadır. Tasarım zamanında (design time) olan biten herşey bir ölçüde kontrolümüzde gerçekleşiyor ancak çalışma zamanlı (runtime) test süreçlerini izlemek oluşabilecek hataları tespit etmek daha önemlisi öngürülemeyen olan hataları düşünmek. Hepsi bir yazılımcının düşünmesi gerekenler arasında yer alıyor.
Bir kod parçacığını oluşabilecek hatalara karşı denetlenmesini “try..catch..finally” blokları ile sağlayabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
try { //.. İstisnai durum oluşturabilecek kod/kodlar } catch ( < exceptionType > e) { //.. İstisnai durum oluştuğunda çalışacak kod/kodlar } finally { //.. İstisnai durum oluşsun veya oluşmasın çalışacak kod/kodlar } |
Try ifadesi çalışma hatası olabilecek komut satırlarından hemen önce, catch ifadesi ise çalışma hatası oluştuğunda çalıştırılacak ifadelerin önüne yazılır. Ayrıca programımızda hata olup olmadığına bakılmaksızın çalıştıracağımız komutlar varsa bunlar finally bloğu altına yazılarak çalıştırılabilir. Finally bloğu isteğe bağlı olarak kullanılır.
Aşağıda ki örnekte klavyeden okunan bir sayının ekrana yazdırılması işlemi hata denetim blokları altına alınmıştır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
static void Main(string[] args) { try { Console.Write("Sayı Giriniz:"); int sayi = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(sayi); } catch(Exception ex) { Console.WriteLine("Hata : " + ex.Message.ToString()); } finally { Console.WriteLine("İşlem Tamam."); } } |
Yukarıda verilen kodu “try..catch..finally” blokları altına almadan çalışma zamanında hatalı değer girişi yapılmış olsaydı;
program kırılacak ve hata fırlatılacaktı. Hata denetim yönetimi yaptığınızda program kırılma noktasında hata olduğunu algılayacak ve önce catch bloğuna sonra finally bloğunu işleticek kırılması önlenecektir.
C#.NET dilinde uygulama geliştirirken oluşabilecek tüm hatalar .NET Framework altındaki Exception sınıfları halinde tanımlanır. Örneğin dizinin büyüklüğünden farklı bir indis verildiğinde IndexOutOfRangeException hatası ortaya çıkar. Tüm hatalar gibi bu hata da Exception taban sınıfından türetilmiştir.
Exception tüm hata türlerini yakalamak ve yönetmek için kullanılan hata sınıfıdır. Bu sınıf içinde birçok hata türünü barındırır. Bu sınıfı kullanarak yakalanan hatalar bir değişkene aktarılıp ekrana yazdırılabilir. Ayrıca yeni istisnalar oluşturulabilir.
C# ile kullanılan belli başlı Exception sınıfları şöyledir;
Exception | Açıklama |
Exception | Genel tüm hatalar |
StackOverFlowException | Taşma hatası |
IndexOutOfRangeException | Index sınırlarının aşılması |
DivideByZeroException | Sıfıra bölme hatası |
ArraytypeMistmatchException | Dizi ile ilgili hata sınıfı |
InvalidCastException | Tür dönüşmleri ile ilgili hata sınıfı |
IOException | Giriş/Çıkış sistem hata sınıfı |
NullReferanceException | Nesne referans hatası |
OutofMemoryException | Yetersiz hafıza |
Argument Exception | Bağımsız değişken hatası |
“throw” Anahtarı
İstisna fırlatmak için kullanılan komuttur. İstisna fırlatmak belli alanlarda kendi istisnalarımızı oluşturmaktır. Oluşturulan istisnalar “Try Catch” bloğu yardımı ile yakalanır.Bu işlem için “Throw New” anahtar kelimesi kullanılır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
try { Console.Write("Bir tuşa basınız"); throw(new Exception("Özel Hata")); } catch(Exception ex) { Console.WriteLine("Hata yaptım: "+ex.Message); } finally { Console.ReadLine(); } |
Sunum Dosyası hatalar-ve-ozel-durum-yonetimi.pptx