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

C# 6.0 Null Conditional Operators (?.)

C# 6.0’da gelen ve null kontrol algoritmasını çok kısa bir şekilde yazmamıza olanak sağlayan, tek başına çok anlamlı durmamasına rağmen, iç içe geçmiş nesneleri yahut propertyleri çağırırken sürekli null kontrolü yapmaktan kurtaran şahane yeniliklerden biri olan Null Conditional Operators (?.)’ünden bahsedeceğim.

Operatörümüzün kullanım prototipini incelersek eğer;

var x = {Eleman1}?.{Eleman2}?.{Eleman3}…

Bu gramerde, {Eleman1} null ise x değişkenine null değerini atayacaktır. Yok eğer null değil ise {Eleman2} çağrılacaktır ve aynı mantıkla kontrol edilecektir. Eğer {Eleman2} null ise x değişkenine null değeri atanacak yok değil ise {Eleman3} çağrılacaktır. Gramerde ne kadar kombinasyon varsa bu mantıkta devam edecektir.

Örnek olarak bildiğimiz kontrol yapılarıyla düzenlemiş olan aşağıdaki null durum kontrolünü ele alalım.

        static void Main(string[] args)
        {
            NorthwindEntities Veri = new NorthwindEntities();
            var Personel = Veri.Personeller.FirstOrDefault(p => p.PersonelID == 250);
            if (Personel != null)
            {
                Console.WriteLine(Personel.Adi);
            }
            Console.Read();
        }

Şimdide bu kontrolü (?.) operatörü ile gerçekleştirelim.

        static void Main(string[] args)
        {
            NorthwindEntities Veri = new NorthwindEntities();
            var Personel = Veri.Personeller.FirstOrDefault(p => p.PersonelID == 250)?.Adi;
            Console.WriteLine(Personel);
            Console.Read();
        }

Bu iki gramer aynı algoritmik açıyla seyretmektedir.

Şimdi olayı daha geniş bir perspektiften ele alalım.

        static void Main(string[] args)
        {
            NorthwindEntities Veri = new NorthwindEntities();
            var Personel = Veri.Personeller.FirstOrDefault(p => p.PersonelID == 7);
            if (Personel != null)
            {
                var Satis = Personel.Satislar.First();
                if (Satis != null)
                {
                    var Musteri = Satis.Musteriler;
                    if (Musteri != null)
                    {
                        Console.WriteLine(Musteri.MusteriAdi);
                    }
                }
            }
            Console.Read();
        }

Yukarıda gördüğünüz iç içe null kontrollü algoritmayı aşağıdaki gibi ?. operatörüyle gerçekleştirelim.

        static void Main(string[] args)
        {
            NorthwindEntities Veri = new NorthwindEntities();
            var MusteriAdi = Veri.Personeller.FirstOrDefault(p => p.PersonelID == 7)?.Satislar.First()?.Musteriler?.MusteriAdi;
            Console.WriteLine(MusteriAdi);
            Console.Read();
        }

Şimdi aradaki farkı anlamışsınızdır diye düşünüyorum.

Oldukça esneklik ve zengin değere sahip olan bir yenilik. Kodları minimize ederek okunabilirliği önemseyen bir yaklaşım sergileyen operatör. Gördüğünüz gibi uzun bir algoritmayı tek satırda ifade edebilmemizi sağlamaktadır.

İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.