Aybars Arslan

Console.WriteLine("Hello World");

C# – Exception Handling

Merhaba arkadaşlar. Bu yazıda exception handlingten bahsedip bir örnek üzerinde anlatmaya çalışacağım.

Exception Handling bir programda compile-time(derleme zamanıda) veya run-time(çalışma) sırasında ortaya çıkan beklenmedik istisnalardır. Bu hatalar proje build edilirken değilde programın işleyiş sırasında bizim canımızı sıkan hatalardır.

Öncelikle biraz hata çeşitlerinden bahsedelim

Syntax Errors

Aşağıda bahsedilen hata bir syntax errordur. Bildiğimiz gibi c# case sensitive bir dildir ve WHILE büyük yazılamaz.

bool flag=true;
WHILE (flag) //syntax error, since c# is case sensitive
{
 //TO DO:
}

Logical Errors

veya aşağıdaki mantık hataları

int a = 5, b = 6;
double avg = a + b / 2.0; // logical error, (a + b) / 2.0

Runtime Errors (Exceptions)

Bizimde yazımız da ilgileneceğimiz runtime exceptionlardır. Bu hatalar program build edilirken hata alınmayan fakat programın akışını bozup durdurabilecek hatalardır. Örnek verecek olursak.

  • Internet üzerinden veri cekeceğimiz bir uygulama da internet bağlantımız yoksa yine bir istisna alırız bu durumu handle etmemiz gerekir. Internet yoksa akışı şöyle devam ettir gibi.
  • Başka bir örnek olarak; projemizde txt dosyasından bir okuma veya yazma yapmamız gerekiyor fakat bu yazacağımız txt dosyası mevcut değil bu durumda file is missing olur, yani yine bir istisna ortada. Bu verdiğim örnek üzerine bir kod ile devam edelim.
                
StreamReader myReader = new StreamReader("Values.txt");
string line = "";
while (line != null)
{
    line = myReader.ReadLine();
    if (line != null)
    Console.WriteLine(line);
}
myReader.Close();

Burada kod Values.txt dosyasını bulduğu taktirde kusursuz olarak çalışacaktır. Eğer Values.txt dosyasını program bulamazsa programımız bir hataya düşecek ve biz bu hatayı yönetmemiş(handle) isek program işleyişi bozulup program kendini durduracaktır. Bu hataları exception handling ile program akışını düzenleyebiliriz.

try-catch

keywordleri istisna yakalama için geliştirilmiştir.
try : bloğunda çalışmasını beklediğimiz kod yer alır.
catch : bloğunda ise istisnai durumun yakalandığı ve sonucunda ne yapılacağının organize edildiği yerdir.

Yukarıdaki örnekteki kodu aşadağıdaki akışta Values.txt bulunmasa bile programın kendisini durdurmadan çalışmasını sağlayabiliriz

                
StreamReader myReader = new StreamReader("Values.txt"); 
try
{
       string line = "";
       while (line != null)
            {
                line = myReader.ReadLine();
                if (line != null)
                Console.WriteLine(line);
            }
}
catch (DirectoryNotFoundException ex) // Directory is missing
{
       Console.WriteLine("Is directory exist ?");
}
catch (FileNotFoundException ex) // FileNotFound
{
       Console.WriteLine("File is not found.");
}
catch (Exception ex) // En genel tüm hataları yakalar
{
       Console.WriteLine("Something didn't work correctly : {0}", ex.Message);
}
finally 
{
       Console.ReadLine();
       myReader.Close();
}

Catch elamanlarımızı en spesifikten en genele göre yazmalıyız. bu hatayı daha rahat tespit etmemizi sağlar.

exceptionHandling1
StreamReader elemanın üzerine faremizle gelerek alınabilecek exception çeşitleri incelenebilmektedir.

Finally : try-catch blokları çalıştıktan sonra her ne olursa olsun çalışacak kod bloğunu belirtir. Genellikle veritabanı işlemlerinde close ve kaynakları serbest bırakmak için kullanılır.

Her zaman kötümser davranmalıyız ve en defansif kodu yazmalıyız. “Always code defensively”

Paylaş !

, , ,

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir