![]() |
|
|
#1 (permalink) |
|
Paylaşımcı Tayfa
![]() Üyelik tarihi: Dec 2006
Nerden: İstanbul
Mesaj Sayısı: 2.364
Konu Sayısı: 127
Takım: Fenerbahçe
Rep Gücü: 4462
Rep Puanı: 445812
Rep Derecesi :
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
Ruh Hali:
|
.Net de Hata Denetimi Yapmak. İyi bir bilgisayar programcısı nasıl olur ? Bu soru gerçekten üzerinde çok durulması gereken bir soru. Bu sorunun bir sürü yanıtı olabilir ama bu yanıtlar arasında bir yanıt var ki belki de tek başına bilgisayar programcısını tarif etmekte - İyi bir bilgisayar Programcısı : Yaptığı programlarda hata çıkmayan , kullanıcıyı sıkmayan, sistem kaynaklarını gereğinden fazla kullanmayan ve her platformda çalışan programlar üreten kişidir Şimdi bu koşulu biraz irdeleyelim Programın dizaynı , sistem kaynaklarının kullanımı,ve platformlar arası çalışma özelliği programcı tarafından kodlanarak yapılması gereken işlemlerdir. Yalnız hatalar program çalışması esnasında ortaya çıkar ve her ortamda programın kırılmasını sağlarlar. Bu durumda programın çalışmasını durdurduğu için programın güvenirliliği konusunda pek hoş bir görüntü ortaya koymaz? Peki vb 6.0 da Runtime(çalışma zamanı) hatalarını nasıl engelliyorduk VB 6.0da kod yazılırken hataları engellememek için hata çıkacak satırın başına "on error resume next " ,"on local error goto 0" , "on error goto LABEL" gibi bir deyimler ekliyorduk bu deyimler bir fonksiyonda 1 den çok kullanılınca büyük bir karmaşa çıkarıyordu ve "Err." nesnesinde donen değerler de hatanın neden kaynaklandığını tam olarak anlamamızda yardımcı olmadığı gibi birde err kodlarını ezberlememizi zorunlu kılıyordu (56=file not found... gibi) Şimdi VB.NETte hata yakalamak için bir program yapalım C++ ve Java bilen arkadaşlar bu konuda pek zorlanmayacaklardır çünkü VB.NETte hata yakalama işlemi try-catch-finally bloklarıyla yapılmaktadır VB.NETte * Hata çıkaracağına inandığınız kodları Try bloğunun arasına yazarız * Eğer yazılan kodun hata çıkarması sonucunda bu alan işleme sokulacaktır bu alan içerisinde istenilirse hatanın neden çıktığı da anlaşılabilir bu değerlere göre kodları yeniden derleyebiliriz veya kullanıcıya bir mesaj verdirerek yönlendirmeye yapabiliriz. * Bu olay her ortamda da çalışır ve opsiyoneldir yani sizin isteğinize bırakılmıştır isterseniz kullanabilirsiniz isterseniz silebilirsiniz Şimdi Basit bir örnek yapalım VB.NET ile yeni bir VB console projesi açalım bu proje içine aşağıdaki kodları yazalım Console.WriteLine("simdi her hangi bir sayının 0 a bölünmesi sonucu oluşacak hataları göreceğiz") Console.WriteLine() Dim i as Integer = 10 Dim j as Integer = 0 Dim k As Integer k = i/j Error satırı Şimdi F5 e basalım ve ortaya çıkan hataları görelim VB.NET bize daha programı exe halinde çalıştırmadan sıfıra bölünme hatayı verecektir ... Şimdi bu işlemden başarısız olduk yeniden kodu aşağıdaki gibi derleyelim Dikkat edin yeni kodumuzda Try-catch blokları arasına yazıyoruz Try Console.WriteLine("simdi her hangi bir sayının 0 a bölünmesi sonucu oluşacak hataları göreceğiz") Console.WriteLine() Dim i as Integer = 10 Dim j as Integer = 0 Dim k As Integer k = i/j Hatalı satır Catch Console.WriteLine("hata oluştu") End Try Şimdi bu kodu F5 tuşuna basarak derleyelim ilk olarak sub main içerisinde Try bloğuna işleme tutulacak ve sırasıyla ekrana ilk iki deeri yazacak sonra "i" değişkenini tanımlayacak, içine de 10 deerini atacak aynı işlemi J değişkeni için içine "0" değerini atayarak yaptıktan sonra " k " değişkenini tanımlama yapacağı anda sıfıra bölünme hatası oluşacak ve program hiçbir şey olmamış gibi Catch Bloğunun işlemi olan konsola hata oluştu yazısını yazıp program sonlanacaktır. Şimdide yukarıdaki örneğe aşağıdaki kodu ekleyelim Catch Console.WriteLine("hata oluştu.") Finally Bu olay her zaman gerçekleşecektir Console.WriteLine() Console.WriteLine("Bu mesajı hep göreceksin") End Try Yukarıdaki örneğe baktığımızda koda Finally alanının eklendiğini görüyoruz bu alan try Catch in bir opsiyonudur ve her zaman çalışır ekranda çıktı olarak "hata oluştu " ve "bu mesajı hep göreceksin" yazısı görünecektir Her şey tamam da peki ben hatanın neden kaynaklandığını nasıl anlayacağım diyorsanız aşağıdaki örneği kodunuza ekleyeceksiniz Catch e As Exception e değişkenini bir Exception tipinde atar ve oluşan hataları e nin üzerinden toplamamızı sağlar Console.WriteLine("Hata oluştu ") Console.WriteLine(e.ToString()) Kullanıcıya hata mesajının tam olarak açıklamasını verir Console.WriteLine("The following error occurred:") Console.WriteLine( e.Message ) Hata mesajını yazar Console.WriteLine( e.Source ) hataya yol açan Uygulama ismini yada Objenin ismini verir that caused the error Console.WriteLine( e.StackTrace ) Hatanın oluştuğu Stack Finally Console.WriteLine() Console.WriteLine("This statement is always printed") End Try Bu noktaya kadar Try chach ın exception ları nasıl yakaladığı hakkında basitçe bir bilgi edinmiş olduk catch satırı sadece bir satır olarak değil bir çok satır olarak da kullanılabilir örneğin yapmış olduğunuz program diskin her hangi bir bölgesine yeni bir dosya oluşturacak ve bilinmeyen hatalar meydana geliyor bu hatalar neler olabilir aşağıdaki örnekte bu hataların neden kaynaklanacağını ve hataları nasıl engelliyeceğimizi basitçe göreceğiz... Şimdi bu kodu programınıza ekleyin ve teker teker kodun her satırını inceleyim Try File.Create("c:/temp/test.txt") Dosya oluşturulması istemi Catch ioe As System.IO.IOException Console.WriteLine("bilinmeyen bir IO hatası meydana geldi c:\temp dizininin olup olmadığını kontrol ediniz") Catch se As System.Security.SecurityException to take this action. Console.WriteLine("Bu işlemi gerçekleştirmeye hakkınız yok!") Catch e As Exception Tüm exception lar için Console.WriteLine( e.ToString() ) End Try Try bloğunda dosyayı oluşturmak istiyoruz bu blokta her hangi bir hata çıkması durumunda bu hataları Catch bloklarına yönlendiriyoruz Catch ioe As System.IO.IOException : Program bu satırı yalnız diske bilgi yazma işlemi sırasında meydana gelen hatalarda çalıştıracaktır örneğin dikin Full olması yolun bulunaması yani verilen folderin bulunmaması ya da yazmaya karşı korumalı olması gibi Catch se As System.Security.SecurityException: Bu satır kullanıcının güvenlik ten dolayı hakkı olmayan bir yere bilgi girmeye çalışması sonucu oluşur Catch e As Exception : Bu alandaki veriler her hata oluşunda mutlaka işlenecektir Sonuç olarak VB.NET, programcılar, biz vb programcıları için yine bir güzellik yapmış ve baş belamız olan " hata ayıklama " bu kadar basit bir düzeye indirmiştir
__________________
bir silahım olsaydı...
![]() hiç bir farklılık ayrımcılığa neden olamaz. Hürriyet Hürriyettir. |
|
|
|
![]() |
| Seçenekler | |
| Stil | |
|
|