-- C#

C# 6.0 – Primary Constructors

Bilindiği üzere Microsoft her teknolojiyi sadeleştirmeyi, kullanıcı dostu arayüz ve hatalardan arındırmış, az emek ile çok iş düşüncesinde çalışmaya alışık bir firmadır. Haliyle bu düşüncelerden C#’da etkileniyor ve programcıların daha az kod yazılması için çaba sarfediliyor.

Geliştirdiğimiz yazılımlarda çoğu zaman copy/paste yapılacak kadar benzer kodlar yazılabilmektedir. Ne kadar design pattern kullansanızda dil özelliklerinden kaynaklanan sorunlara çare bulamayabiliyorsunuz. Hadi reflection gibi yöntemlerle işleri daha otomatize edelim desenizde sonuç olarak genelde çok kod yazılmaya sebep olan bazı özellikler vardır. 🙂

Şimdi bu özelliklerden birini açıklayıp C# 6 ile nasıl giderildiğini anlatmaya çalışacağım. Bu konuyu anlatırkende örnekleri dallı budaklı hale getirip kafanızı karıştırmak istemiyorum. Bu nedenle örnek basit olacak.

Normalde oluşturduğumuz sınıflarda bir ya da birden fazla yapıcı metot(constructor) olutşruruz. Bu yapıcı metodlar sınıfın ilk kurulması gereken metodu olabilir ve bizden parametre isteyebilir. Aldığı parametreyide içeride private bir alana atayacaktır. Bu durumda yazılması gereken kod aşağıdaki gibi olacaktır.

    public class Kullanici
    {
        private string ad;
        private string soyad;

        public string Ad { get { return ad; } }
        public string Soyad { get { return soyad; } }

        public Kullanici(string ad, string soyad)
        {
            this.ad = ad;
            this.soyad = soyad;
        }
    }

Eminim yukarıdaki kod tanıdık gelmiştir. Bu kod ile yapılmak isteneni yukarıda açıkladım. Gayet net ve basit bir düşünce var ve hiç karmaşık değil. Bunun için işlemleri daha da kolaylaştırmak mantıklı olabilir. Mesela yapıcı metodu oluştururken sınıf adını kullanarak new ile türetme sırasında parametreler atamıyor muyuz? O halde geliştirme tarafında da bu mantığı kullanmak gayet anlamlı olacaktır. Peki nasıl? C# 6 yeniliklerinden biride auto property’lerin daha de geliştirilmesi ve esnetilmesi olmuştur. Bu işlem C# 6 auto property’leriyle aşağıdaki gibi yapılabilmektedir.

    public class Kullanici
    {
        public string Ad { get; }
        public string Soyad { get; }

        public Kullanici(string ad, string soyad)
        {
            this.ad = ad;
            this.soyad = soyad;
        }
    }

Burada yapılan değişiklik Property’nin daha akıllı hale getirilmesidir diyebiliriz. “Ben zaten bunu otomatik yapmanı istiyorum, get diyorsam kendi içinde bir field oluşturup değer alışverişini gerçekleştir” anlamında bir geliştirmedir bu. Bize kazandırdığı ise yapıcı metod içerisinde bir private değişken tanımlama gerekliliğinin ortadan kalkması olmuştur.

Devam edelim ve amacımız olacak Primary Constructor’ı oluşturalım şimdide.

    public class Kullanici(string ad, string soyad)
    {
        public string Ad { get; } = ad;
        public string Soyad { get; } = soyad;
    }

Yukarıda yazdığımız kod ne yapar? Sınıfı oluştururken kendi içinde bir yapıcı metod olacağını ve bu metodun 2 parametre alacağını, bu sınıfı türetirkende bu yapıcı metodun kullanılacağını belirtir. Makalenin başında yazdığımız sınıf ile bu kodların aynı işe yaradığını düşünürsek, epey bir kod yazma kolaylığı ve kodlama düzeni getirdiğini söyleyebiliriz.

.NET ile programlamaya yeni başlayanlar için şunu belirtmekte yarar görüyorum. C# 6 bize bu kolaylığı sağlıyor diye aslında bu kodlar yazılmıyor anlamına gelmez. Sadece biz yazmıyoruz. Derleyiciye kısa şekilde kodlarımızı yazıp gönderiyoruz ve kendisi bunun detaylı ve geniş versiyonunu oluşturup o kodlar üzerinden çalıştırılıyor. Örneğin siz property oluşturursunuz ancak C# arka planda get ve set metodları olan bir tanımlama yapar.

İyi çalışmalar.
Cihan Özhan

Yorumla

Yorum