C# try catch kullanımı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
C# try catch kullanımı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

3 Nisan 2013 Çarşamba

70 - Try Catch... Özel Durumlar...

.NET Platformu tarafından sağlanan özel durum kütüphanesi oldukça kapsamlıdır. .NET Platformunda birçok özel durum tanımlanmıştır ve yazılan herhangi bir programda bu özel durumlarla karşılaşma oranı son derece yüksektir. Örneğin, yazılan bir programda metinsel veriyi sayısal bir veriye dönüştürme özel durumu ile karşılaşılabilir. Bunun yanında int16 veri türüne sahip bir değişkene int32 kapsamındaki bir veriyi (overflow, taşma hatası) atama gibi bir özel durumla da karşılaşılabilir. Bunun gibi daha birçok özel durumla karşılaşma durumu söz konusudur. Karşılaşılan her bir özel durum için ayrı ayrı try-catch bloku yazmak elbette son derece mantıksızdır. Bunun yerine aynı try-catch blokunda farklı catch bölümler kullanılabilir.

Bazı özel durumlar aşağıda gösterilmiştir;
FormatException: Sayısal veri türüne sahip bir değişkene bir harf girilmesi veya atanması
OverflowException: Bir değişkene atanan veya girilen sayı, değişkenin tanımlandığı veri türünün alabileceği aralığın dışında kalması
ArgumentNullException: Sayısal veri türüne sahip bir değişkene null değerini atamak

Diğer özellik ise Finally Bloğudur...  Bir kodlamada bir özel durum oluşsa da oluşmasa da ifadenin her zaman çalıştığından emin olmanın yolu onu bir finally blokunun içine yazmaktır. Finally bloku, bir try blokundan hemen sonra ya da try blokundan sonraki son catch blokundan hemen sonra ortaya çıkar. Program finally blokuyla ilişkili try blokuna girdiği sürece finally bloku her zaman çalışacaktır.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication9
{
    class Program
    {
        static void Main(string[] args)
        {
            // Try Catch Bloğu ile özel durumların kontrolü ve Finally bloğu... 

            byte sayi1 = 0, sayi2 = 0; 

        tekrar: // Hata ile karşılaşılırsa bir daha buraya dönecek...
            Console.WriteLine("Sayıları Giriniz:");

            try
            {
                sayi1 = Convert.ToByte(Console.ReadLine());
                sayi2 = Convert.ToByte(Console.ReadLine());  
                Console.WriteLine("Toplama = " + Convert.ToString(sayi1 + sayi2));
            }
            catch (FormatException)
            {
                // Sayısal veri girmezseniz bu hata bloğu çalışıyor... Örneğin sayı girilecek yerde enter a basın ve deneyin...
                Console.WriteLine("Lütfen sayısal veriler giriniz...");
                goto tekrar;
            }
            catch (OverflowException)
            {
                // Byte 0-255 arası değer alır biliyorusunuz... Bu durumda 255 den büyük bir sayı girildiğinde bu hata mesajı ile karşılaşılır... 
                Console.WriteLine("Hata... Alanlara çok büyük sayılar giriyorsunuz...");
                goto tekrar;
            }
            finally
            {
                // Her halükarda bu kısım çalışacak... Try olsada, catch olsada değişmez... 
                Console.WriteLine("Not: Byte alanına 0-255 arası veri girilebilmektedir... ");
                Console.WriteLine("\n\n\n");
            }

            Console.ReadKey();
        }
    }
}

69 - Try Catch... Hata Ayıklama yada Hata Yakalama...


Program çalışırken hemen hemen her aşamasında hatalar meydana gelebilir. Kod parçalarının her zaman beklenildiği gibi çalışacağından emin olmak oldukça zordur. Bu hatalar kişiden kaynaklanabileceği gibi kişinin dışından da kaynaklanabilir. Bilgisayara bir program kurulduğu düşünülsün. Çok gerekli bir program olsa da sürekli programda hatalarla karşılaşılırsa ne kadar gerekli olursa olsun, bir daha bu program kullanılmak istenilmez. Oysa programın hataları giderilmiş, hata verdiğinde hatanın nedeninin ne olduğu söyleniyorsa elbette ki bu programı kullanmak kişiye daha yakın gelecektir. O nedenle de hataların programdan ayıklanması son derece önemlidir.

Yukarıdaki anlatım modüldeki notlardır... Kısaca şöyle söyleyebiliriz... Programınızı yaptınız... Kullanıcılara da sundunuz... Gayet güzel çalışıyor... Ama kullanıcı sonuçta bunlar... Kontrol etmediğiniz her alan sizin için sıkıntı... Pat, bir telefon geldi... Program çalışırken beklenmedik bir hata ile karşılaşıp çıkıyor... Gittiniz baktınız ki sayı girilmesi gereken  bir yere kullanıcı metin giriyor... veya hata yapıp çok büüyk sayılar giriyor... işte bu durumda Try Catch bloğu devreye giriyor... Eğer bu satırlara Try Catch bloğu ile kontrol sağlasaydınız   bir uyarı mesajı verdirip programı devam ettirebilirdiniz... 

Aşağıdaki programda giriş değerleri olarak metinsel ifadeler girilirse program hata verecek ve tekrar giriş yapılması istenecektir... 


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace İkiSayiTopla
{
    class Program
    {
        static void Main(string[] args)
        {
            // Klavyeden girilen iki sayıyı toplayan programı yapacağız... Ama Try Catch Bloğu ile kontrol ettireceğiz... 
            int sayi1=0, sayi2=0;

        tekrar: // Hata ile karşılaşılırsa bir daha buraya dönecek...
            Console.WriteLine("Sayıları Giriniz:");
            try // Hata kontrolü yapılıyor... Doğru çalışırsa try bloğundaki kodlar işlenecek... 
            {
                sayi1 = Convert.ToInt16(Console.ReadLine());
                sayi2 = Convert.ToInt16(Console.ReadLine());
            }
            catch (Exception) // Hata olursa Catch bloğundaki kısımlar çalışacak... 
            {
                Console.Clear();
                Console.WriteLine("Hata... Değerleri tekrar girmenizde fayda var... ");
                goto tekrar;
            }

            Console.WriteLine("Toplama = " + Convert.ToString(sayi1 + sayi2));
            Console.ReadLine();
        }
    }
}