C# 7.0 – Discard Kavramı

Merhaba,

Genellikle C# sürümlerindeki yenilikler üzerine konu bazlı değerlendirme içerikleri oluşturarak mümkün mertebe kendimi ve bloğumu güncel tutmaya çalışmaktayım. Tabi arada bazı konular gözden kaçabilmekte yahut sonra değerlendirilmek üzere ileriye ötelenebilmektedir. Bu içeriğimizde C# 7.0 ile gelmiş olan ve gözden kaçan(bu makale klavyeye alındığı esnada mevcut C# sürümü 7.3) bir özellik olan Discard Kavramı üzerine konuşuyor olacağız.

C#’ta Discard kavramı “_”(alt tire) karakteriyle alakalı bir kavramdır. Normal şartlarda C# programlama dilinde sadece adı “_” karakterinden oluşan değişken tanımlanabilmekte ve kullanılabilmektedir.

            int _ = 123;
            Console.WriteLine(_);

Burada “int” tipinden “123” değerini tutan değişkenimizin adı “_” karakteridir.

Eğer ki ilgili karakterde bir değişken tanımlanmamışsa ve salt bir şekilde kullanılıyorsa işte o durumda “_” karakteri Discard özelliği göstermektedir.

Peki Discard Operatörünün Görevi Nedir?
Bir veriyi, değişkeni, propertyi yahut metot geri dönüş değerini bir noktaya atama işlemi neticesinde ilgili değerin bellekte bir yer ayrılmayacak şekilde çöp olarak kabul edilmesini sağlamakla görevlidir.

Bir başka deyişle değişken deklare(tanımlama) etmeye ihtiyaç duyulmadığı durumlarda Discard operatörü kullanılarak sonraki adımlarda hiçbir zaman kullanılmayacak değişkenleri boşuna oluşturarak bellekte lüzumsuz yer işgal edilmemesini sağlamaktadır.

Salt Değerlerde Kullanımı

Şimdi aşağıdaki kodları inceleyiniz;

            _ = "3";
            _ = 3;
            _ = true;
            _ = new int[5] { 1, 2, 3, 4, 5 };

görüldüğü üzere “string” tipteki “3” değerini Discard operatörü sayesinde herhangi bir değişken ile belleğe atmaksızın ifade etmiş bulunmaktayız. Benzer mantıkla “int” tipindeki “3” ve “bool” tipteki “true” değerleri içinde geçerlidir. Ayriyetten sonuncu örneğe dikkat ederseniz “int” tipinde 5 elemanlı bir dizide discard operatörü ile karşılanmaktadır.

Metotlarda Kullanımı

Direkt salt değerler yerine aşağıdaki gibi metot geri dönüş değerlerinide discard ile karşılayabiliriz;

        static void Main(string[] args)
        {
            int GetValue() => 3;
            _ = GetValue();
        }

Out Parametrelerde Kullanımı

Discard özelliğinin en büyük getirisi out parametrelerin kullanıldığı metotlarda ilgili parametrenin herhangi bir değişken ile karşılanmasına gerek olmadığı durumlarda kullanılmasıdır.

Bunun için en iyi örnek TryParse metodu olabilir;

            if (int.TryParse("50", out _)) { }
            if (int.TryParse("50", out int _)) { }

dikkat ederseniz eğer “out _” ya da “out int _” şeklinde de kullanılabilmektedir. Aynı şekilde kendi yazmış olduğumuz out parametreli metotlar içinde aşağıdaki gibi kullanılabilir;

        static void Main(string[] args)
        {
            void OutMethod(out int i) => i = 5;
            OutMethod(out _);
            OutMethod(out int _);
        }

Tuple Tiplerde Kullanımı

Ve son olarak Discard’ın Tuple nesnelerde nasıl kullanıldığına dair aşağıdaki örnekleri inceleyebilirsiniz;

        static void Main(string[] args)
        {
            (int a, int b, bool c) GetValues() => (3, 5, true);
            (int a, int b, bool c) = GetValues();
            (int _, int _, bool _) = GetValues();
            (int _, int b2, bool _) = GetValues();
            (int _, int b3, bool c2) = GetValues();
            (int a2, int b4, _) = GetValues();
            (int a3, _, _) = GetValues();
            (int _, _, _) = GetValues();
        }

görüldüğü üzere geriye “(int a, int b, bool c)” tiplerinden verileri dönen “GetValues” isimli Tuple nesnesinin discard operatörüyle birçok kullanım kombinasyonu örneklendirilmiştir.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımızda görüşmek üzere…
İyi çalışmalar dilerim…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 03 Haziran 2019

    […] olarak default değerler için aşağıdaki gibi Discard operatörünü kullanmamız yeterli […]

Bir cevap yazın

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

*

Copy Protected by Chetan's WP-Copyprotect.