Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

C#’da Checked ve UnChecked Komutları

C# programlama dilinde, elimizdeki sayısal verileri birbirlerine cast operatörü ile dönüştürürken, küçük değer aralığına sahip tipte tutulan değişkeni büyük değer aralığına sahip tipte tutulan değişkene dönüştürmeye çalışırsak normal bir işlem gibi algılanacaktır. Lakin tam tersi durum, yani büyük değer aralığına sahip tipte tutulan değişkeni, küçük değer aralığına sahip bir tipte tutulan değişkene dönüştürmeye çalışıyorsak eğer olası veri kaybetme durumuyla karşı karşıyayız demektir.

Bu olası hata durumu cast edilecek büyük tipteki verinin değerinin, cast edildiği küçük tipin değer aralığını aşması durumunda gerçekleşen tetiklenmektedir.

Örnek olarak aşağıdaki durumu inceleyiniz;

        static void Main(string[] args)
        {
            int Sayi1 = 999999999;
            decimal Sayi2 = (decimal)Sayi1;
        }

Yukarıdaki kod bloğunu incelerseniz eğer int tipindeki Sayi1 değişkeni, cast edilerek decimal tipteki Sayi2 değişkenine atanmıştır. Burada hata beklenmemektedir. Çünkü decimal tipinin değer aralığı int tipinden büyük olduğu için her halukarda ilgili veri alanı net fazla olacağı için veri kaybı beklenmeyecektir.

        static void Main(string[] args)
        {
            decimal Sayi1 = 999999999;
            int Sayi2 = (int)Sayi1;
        }

Yukarıdaki kod bloğunu incelersek eğer; büyük değer aralığına sahip decimal tipinden Sayi1 değişkeni, cast edilerek kendisinden daha küçük değer aralığına sahip int tipinden Sayi2 değişkenine atanmıştır. İşte böyle bir durumda decimal değer içerisindeki ifade int’in değer aralığını aşabilecek kıvamda olması muhtemeldir. Şuan ki vaziyette int değerinin sınırıyla neredeyse denk olan örnekte bir hata olmayacaktır. Lakin Sayi1 değişkenine bir adet fazladan hane girildiğinde çalışma zamanında aşağıdaki hata alınacaktır.

C#'da Checked ve UnChecked Komutları
Gördüğünüz gibi decimal değişkenin değeri int tipinin değer aralığını aştığı durumda cast işlemi yapıldığında hata alınmaktadır.

İşte Checked ve UnChecked anahtar sözcükleride bu tarz cast işlemlerinde kullanılabilen kontrol bloklarıdırlar.

Checked Bloğu

Değişkenimizin türünü daha küçük bir tipe çevirirken veri kaybı oluyorsa program hata veriyor.

        static void Main(string[] args)
        {
            checked
            {
                decimal Sayi1 = 9999999990;
                int Sayi2 = (int)Sayi1;
            }
        }

Bu şekilde checked bloğu içerisinde cast işlemi yapılıyorsa, veri kaybı olduğu durumda yukarıdaki gibi çalışma zamanı hatası verecektir.

UnChecked Bloğu

Checked tersi, program hata vermeden yoluna devam ediyor. Yani değişkenimizin türünü daha küçük bir tipe çevirirken veri kaybı oluyorsa program hata vermeden yolumuza devam edebiliyoruz.

        static void Main(string[] args)
        {
            uchecked
            {
                int Sayi1 = 999999999;
                byte Sayi2 = (byte)Sayi1;
            }
        }

Yukarıdaki örneği incelersek eğer int tipinde bir değişken, kendisinden daha küçük byte tipinden bir değişkene cast edilmektedir. Haliyle veri kaybı oluşmakta ve bu durumu unchecked sayesinde göz ardı ederek işlemimize devam edilmektedir.

Sonraki yazılarımda görüşmek üzere…

İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

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