İlkay İlknur

just a developer...

Primary Constructors ve Auto Property Initializers ile Immutable Nesne Geliştirme

Immutable nesne kavramına önceki yazılarımdan birinde değinmiştim. En özet haliyle hatırlatmam gerekirse, durumları yaratıldıktan sonra değiştirilemeyen nesnelerdir immutable nesneler. Eğer durumlarında değişiklik yapmanız gerekirse, istediğiniz yeni duruma sahip olan yeni bir nesne yaratmamız gerekir. (Daha detaylı bilgi almak için yazının başında da belirttiğim gibi ilgili blog yazısını okumanızı öneririm.)

C# içerisinde immutable nesneler geliştirmek  C# developerlar için en baştan beri tam bir eziyet halini almıştır.

Neden eziyet halini aldığını gelin aşağıdaki immutable class örneğine bakarak görelim.

public class ImmutableClass
{
    private readonly int _x;
    private readonly int _y;

    public int X
    {
        get
        {
            return _x;
        }
    }
    public int Y
    {
        get
        {
            return _y;
        }
    }
    public ImmutableClass(int x, int y)
    {
        this._x = x;
        this._y = y;
    }
}

İçerisinde sadece 2 readonly property bulunan ve property değerlerini de constructordan alan bir sınıf tanımlaması için sizce de bu kodlar fazla değil mi :) En azından bana fazla geliyor. :) Burada compilerın developerların işlerini kolaylaştırması gereken pek çok nokta var.

C# 6.0 ile çözümü amaçlanan konuların başında immutable nesneler geliyor.  Immutable nesne tanımlanmasında şimdiye kadar getirilen primary constructors ve auto-property initializers ile çözümler bulunmaya çalışılıyor. Aslında birazdan bulunan çözüme baktığınızda "bulunmaya çalışılıyor" sözümün aslında gereksiz olduğunu ve çözümün bulunduğunu da düşünebilirsiniz :)

Bakalım yukarıda C# 6.0 öncesinde geliştirdiğimiz immutable sınıfı, C# 6.0 ile beraber nasıl yazabiliyoruz.

public class ImmutableClass(int x, int y)
{
    public int X { get; } = x;
    public int Y { get; } = y;
}
Aslında herşey ortada değil mi :) Benim sanırım artık pek birşey dememe gerek kalmıyor :) Umarım faydalı olmuştur. Not : Blog yazıları haricinde sosyal medya üzerinden anlık paylaşımlarımı Twitter ve  Facebook'tan takip edebilirsiniz.


Yorum Gönder