C# & VB.Net / Visual Basic 6.0dan Visual Basic.NET’e Geçiş – 3 Hata Takibi
Bu yazı ile Visual Basic.NET ile hata takibi(Error Handling) konusuna da giriş yapmış oluyoruz.
Yazdığımız uygulamalarda her zaman kullanılan ve uygulamanın takip edildiği sistem hata takip sistemidir. Kullanıcı içinde, uygulamayı yazan içinde yararlı bir sistemdir. Kullanıcı açısından baktığımızda hata durumlarında anlamayacağı mesajlar ile karşılaşmamalı. Bu hiç hoş bir durum olmaz. Kullanıcıyı anlayacağı dilde bir hata mesajı ile karşılaştırmalıyız. Ayrıca uygulamanın gidişatını takip etmek amacı ile bizlerin yani programcıların anlayacağı dilde hataları kodları ile birlikte bir yerde tutmamız gerekli.
Bu yazı ile Visual Basic.NET ile hata takibi(Error Handling) konusuna da giriş yapmış oluyoruz. Bir sonraki yazılarda bu sınıf ile yapılabileceklere ayrıntılı olarak değineceğim.
Visual Basic 6 programcıları bu durumlar için Err objesini kullanıyorlar. Visual Basic 6 içerisinde On Error Resume Next satırını uyguladığınız zaman oluşabilecek tüm hataları program göz ardı eder. Ardından hata oluşabilecek program bölümlerine;
Kod satırını uyarladıkları zaman hatayı yakalarlar.
Ancak Visual Basic.NET’e geçerken bu uygulamayı komple unutuyoruz. Onun yerine öğrenmemiz gereken yeni bir blok karşımıza çıkıyor. Try – Catch – Finally blokları. Bu blok tanımlaması ile hataları yakalayıp ona göre yapacağımız işlemleri belirliyoruz.
Visual Basic 6 programcıları için konuşmak gerekirse Visual Basic 6’daki Err objesi ile aynı olmasa da ana amaç olarak aynı görebilirsiniz. Visual Basic 6’da her hata ihtimalinde If Err Then şart satırı ile takip etmemiz gerekli. Ancak burada kullanımı daha kolay bir sistem ile karşı karşıyayız.
[Try durumunda yapacağı işlemler]
[ Catch [ exception_adı [ As type ] ]
[ Catch durumunda yapacağı işlemler ] ]
[ Finally durumunda yapacağı işlemler ] ]
Visual Basic 6 programcıları için farklı bir blok tanımlama. Bu kod bloğunun ne anlama geldiğini açıklayalım. Bahsettiğimiz hata takibi durumları için uygulamamız gereken kod satırı. Kod içerisinde yaptırdığımız bir işlemden sonra bu bloğu uygularsak ilk önce Try durumuna gelecektir. Buda hata yoksa, herşey düzgün gidiyorsa demek. Eğer hata yoksa yapacağı işlemleri belirtiriz. Hata var ise Catch bloğuna düşecektir. Burada da hata durumunu özel olarak bile belirtebiliriz. Bunun ayrıntılı bilgisini ilerde vereceğim. Hata durumunda buraya düşeceği için yapması gereken işlemleride belirtebiliriz. Exit Try ifadesi ise bu kod bloğunda işlemi bitirir ve Finally bloğuna düşer.
Bir örnek ile sistemin nasıl çalıştığını görelim. Örneğimizde bir tam sayıyı 0(Sıfır) ile bölmeye çalışalım. Bu hatalı bir durumdur. Bunu nasıl yakaladığını görelim.
Uygulamamız gereken kod satırı;
Dim iSay1 As Integer
Dim iSay2 As Integer
Dim iSonuc As Integer
iSay1 = 5
iSay2 = 0
iSonuc = iSay1 / iSay2
MessageBox.Show("Bir sayıyı 0a bölmeye çalışıyorsunuz. Lütfen tekrar deneyiniz.")
MessageBox.Show("Sonuç=" & iSonuc)
Burada Integer veri tipinde iSay1, iSay2 ve iSonuc isimli üç tane değişken tanımlıyorum. iSay1 değişkenime 5 tam sayı değerini atıyorum. iSay2 değişkenime ise 0(Sıfır) değeri atıyorum. Try – Catch – Finally bloğunu yerleştiriyorum. Try durumunda yapmak istediğim işlemi yazıyorum. İlk önce program bu bloğa düşecektir ve iSay1 ile iSay2 değişkenlerindeki değerleri bölerek sonucu iSonuc değişkenine aktarmak isteyecektir. Ancak bu bir hatalı işlem olduğu için hemen Catch bloğuna düşüp belirtilmiş olduğumuz System.OverflowException hata durumunu kontrol edecektir. Gerçekten de bu işlemin sonucunda bu hata oluşacağı için ekrana çıkartmak istediğimiz mesajı çıkaracaktır.
Hemen ardından Finally bloğuna düşüp yapmak istediğimiz olan son işlemi yani ekrana iSonuc değerini çıkaran mesajı gösterecektir.
Bu işlemler sonucunda programınız kapanmadan işlemini gerçekleştirmez ve sizi gerekli şekilde uyarır.
Eğer bu şekilde bir hata takibi durumu kullanmazsanız program kırılacaktır.
Çıkacak hata mesajı System.OverflowException olacaktır. Biz Try – Catch bloğunda böyle bir durum olabileceği ihtimaline karşı Catch ex As System.OverflowException kod satırını uyguladığımız için bize bu mesajı çıkarmıyor.
Exception’ın Özellikleri ve Metotları
Özellik (Property) Açıklama
InnerException Exception objesinin iç referansını gönderir.
Message Hata mesajının içeriğini gönderir. String tipinde değer gönderir.
Source Objenin içeriğini oluşturan hatanın adını string tipinde değer olarak gönderir.
StackTrace Stack (Yığıt) Trace’deki string tipindeki değeri sadece okunur olarak tutar.
TargetSite Sadece okunabilir string tipindeki değeri metotları tutar. Hatanın hangi işlem sonucunda olduğunu belirtir.
Equals Exception objesi ile diğerlerinin eşit olup – olmadığına karar verir.
GetBaseException Hata zincirideki ilk hata durumunu gönderir.
GetHashCode Hash tablolarına benzer. Hash fonksiyonlarını sunar.
GetType Exception durumunundaki objenin tipini gönderir.
ToString Hata mesajını string tipinde gönderir.
Bir sonraki yazıda daha ayrıntılı bilgileri bulabileceksiniz.