Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
   
Konu: C# - checked ve unchecked {11}
Hera
*
avatar
Yüzbaşı
Durum: Çevrimdışı
Seviye Puanı: 9
Yaşam Puanı: 42 / 201
Deneyim: 5 / 100
Rep Sayısı: 27
Mesaj Sayısı: 101
Üyelik Tarihi: 13.04.2019
     
Yorum: #1
C# - checked ve unchecked {11}
09.05.2019 18:52
checked ve unchecked Anahtar Sözcükleri
Bir önceki konumda en son verdiğim programda büyük türlerin küçük türlere dönüştürülmesi sırasında oluşabilecek veri kayıplarından bahsettim. Bu veri kayıplarına sebep olan tür dönüştürme işleminde derleyici herhangi bir hata vermemektedir. Bu da isteğimiz dışında bazı önemli hatalara sebep olmaktadır. Hemen her programda değişkenlerin değeri çalışma zamanında sürekli değişmektedir. Yani değişkenlerin değerini önceden tahmin etmek mümkün olmayabilir. Özellikle rastgele işlemlerin yoğun bir şekilde kullanıldığı oyun programlarında bu tür durumlarla sıklıkla karşılaşılır. Bir değişkene tutabileceği maksimum değerden büyük bir değere atama veri kaybına sebep olacaktır. Herhangi bir zamanda bir değişkeni maksimum değerden büyük olup olmayacağını bilemeyiz. Bu yüzden veri kayıplarına karşı önlemler almalıyız. Bu önlemlerden biri checked anahtar sözcüğünü kullanmaktır.

checked anahtar sözcüğü ile çalışma zamanında bu tür veri kayıplarının olabileceği durumlarda hata vermesini sağlarız. Eğer checked anahtar sözcüğü kullanılmamış olsaydı herhangi bir hata verilmeden program icrasına devam edecekti. Aşağıdaki programda checked anahtar sözcüğünün kullanımına bir örnek görebilirsiniz.
Kod:
using System;

namespace Cyberizm
{
    class Program
    {
        static void Main()
        {
            int i = 256;
            byte b;
            checked
            {
                b = (byte)i;
            }
            Console.WriteLine(b);
        }
    }
}

Bu programı derleyip çalıştırdığımızda aşağıdaki gibi bir hata ile karşılaşırız;
Bu hata ile atama işleminde bir taşmanın olduğu gösterilmektedir.

İstisnai durum yakalama (Expception Handling) mekanizması ve bu tür durumlarda programın verdiği çeşitli uyarıları ilerleyen konularımda anlatacağım.

checked anahtar sözcüğünün kullanımı ile ilgili dikkat edilmesi gereken önemli noktalardan biri de checked bloklarının içinde tanımlanan değişkenlerin blok dışında tanınmayacağıdır. Bu konumda
bahsettiğim gibi blok faaliyet alanında tanımlanan değişkenler blokların dışında tanınmazlar. Örneğin aşağıdaki program derlenmeyecektir;
Kod:
using System;

namespace Cyberizm
{
    class Program
    {
        static void Main()
        {
            int i = 256;
            checked
            {
                b = (byte)i;
            }
            Console.WriteLine(b);
        }
    }
}

Programın derleme zamanında vereceği hata şudur : "The name 'b' does not exist in the class or namespace." Türkçe Meali : "Cyberizm(namespace), b değişkeni sınıf ya da isim alanında bulunamadı."

unchecked anahtar sözcüğü checked anahtar sözcüğünün tam tersidir. Varsayılan olarak bütün kodlar unchecked durumundadır. Yani işlecsel olarak normal bir kod ile unchecked blokları arasında kodun hiç bir farkı yoktur. Ancak bazı durumlarda checked blokları içinde uzun kod bölümünde bazı yerleri unchecked durumuna getirmek isteyebiliriz. Aşağıdaki programı unchecked anahtar sözcüğünün bu tür kullanımına örnek olarak veriyorum.
Kod:
using System;

namespace Cyberizm
{
    class Program
    {
        static void Main()
        {
            int i = 256;
            int a = 300;
            byte b, c;
            checked { b = (byte)i; }
            unchecked { c = (byte)a; }
            Console.WriteLine(b);
        }
    }
}

Alinti



1 Ziyaretçi