C#

C# Exception Handling

Yazar - UĞUR

Exceptions

Exception(Özel Durum/İstisna) program yürütülürken oluşan bir sorundur. İstisnalar programın anormal son vermesine neden olur.
Birçok farklı sebeple bir exception meydana gelebilir. Bazı örnekler:
– Bir kullanıcı geçersiz veri girdi.
– Açılması gereken bir dosya bulunamadı.
– İletişimlerin ortasında bir ağ bağlantısı kesildi.
– Fiziksel kaynaklarla ilgili yetersiz bellek ve diğer sorunlar.

Örneğin, aşağıdaki kod, çalıştırıldığında bir istisna üretir çünkü mevcut olmayan bir dizini talep ederiz:

int[] arr = new int[] { 4, 5, 8 };
Console.Write(arr[8]);

Görebileceğiniz gibi, istisnalar(exception) kullanıcı hatası, programcı hatası veya fiziksel kaynak sorunları nedeniyle oluşur. Bununla birlikte, iyi yazılmış bir program olası tüm istisnaları(exception) ele almalıdır.

Handling Exceptions (İstisnaların Ele Alınması)

C #, bir hata oluştuğunda programın çökmeyeceği şekilde, istisnaları işlemek için try-catch ifadesi adı verilen esnek bir mekanizma sağlar.
try (Deneme) ve catch (yakalama) blokları aşağıdakine benzer şekilde kullanılır:

try {
 int[] arr = new int[] { 4, 5, 8 };
 Console.Write(arr[8]);
}
catch(Exception e) {
 Console.WriteLine("An error occurred");
}
//Outputs "An error occurred"

Bir istisna oluşturabilecek kod, try bloğuna yerleştirilir. Bir istisna oluşursa, catch blokları programı durdurulmadan yürütülür.
Yakalamak istediğiniz istisna(exception) türü, catch ifadesini takiben parantez içinde yazılır.
Her tür istisnayı işlemek için genel istisna türünü kullanırız. Orijinal hata mesajı (e.Message) gibi istisna ayrıntılarına erişmek için e istisna nesnesini kullanabilirsiniz:

try {
 int[] arr = new int[] { 4, 5, 8 };
 Console.Write(arr[8]);
}
catch(Exception e) {
 Console.WriteLine(e.Message);
}
// Index was outside the bounds of the array.

Ayrıca, farklı istisnaları ayrı ayrı da yakalayabilir ve idare edebilirsiniz. 

Handling Multiple Exceptions

Tek bir try bloğu, farklı istisnaları(exception) ayrı ayrı işleyen birden fazla catch bloğu içerebilir.
Exception kullanımı, kullanıcı girdilerinde özellikle yararlıdır.
Örneğin, kullanıcı tarafından iki sayı girilmesini isteyen ve bölümünü çıktılayan bir program için, kullanıcının ikinci sayı olarak 0 girmesi durumunda bölmeyi sıfır olarak uyguladığınızdan emin olun.

int x, y;
try {
 x = Convert.ToInt32(Console.Read());
 y = Convert.ToInt32(Console.Read());
 Console.WriteLine(x / y);
}
catch (DivideByZeroException e) {
 Console.WriteLine("0 bölünemez");
}
catch(Exception e) {
 Console.WriteLine("Bir hata oluştu");
}

Yukarıdaki kod DivideByZeroException‘u ayrı ayrı işlemektedir. Son catch, oluşabilecek diğer tüm istisnaları işler. Birden çok istisna ele alınırsa istisna türü en son tanımlanmalıdır.
Şimdi, kullanıcı ikinci sayı için 0 girerse, “0 bölünemez” görüntülenir.
Örneğin, kullanıcı tamsayı olmayan değerler girerse, “Bir hata oluştu” görüntülenir.

Şu istisna türleri en yaygın kullanılanlardan bazılarıdır: FileNotFoundException, FormatException, IndexOutOfRangeException, InvalidOperationException, OutOfMemoryException.

finally

İsteğe bağlı bir finally blok, catch bloklarından sonra kullanılabilir. Finally bloğu, bir istisna atılıp atılmadığına bakmaksızın belirli bir ifade kümesini yürütmek için kullanılır.
Örneğin:

int result=0;
int num1 = 8;
int num2 = 4;
try {
 result = num1 / num2;
}
catch (DivideByZeroException e) {
 Console.WriteLine("Error");
}
finally {
 Console.WriteLine(result);
}

finally blok, örneğin dosyalar veya diğer kaynaklarla çalışırken kullanılabilir. Bunlar finally blokta, bir istisna olmasına bakılmaksızın kapatılmalı veya bırakılmalıdır.

Yorum Yap

This site uses Akismet to reduce spam. Learn how your comment data is processed.