İlkay İlknur

just a developer...

C# 6.0 - Nameof Expressions

Başlamadan : Aşağıda inceleyeceğimiz özellik Visual Studio 14 CTP 3 ile gelen bir özelliktir. Visual Studio 14 CTP nasıl kurulur ve aşağıdaki gibi özellikleri denemek için ne yapmak gerekir  gibi soruların cevaplarını linklerde bulabilirsiniz.

Visual Studio 14 CTP 3 ile beraber C# içerisine implemente edilmiş olan özelliklerden biri de nameof expressionlar. Bazı durumlarda kod içerisinde kullandığımız değişkenlerin metotların isimlerini string olarak yazma gereği duyarız. Örneğin, bir metoda gelen parametrelerden biri null ise ArgumentNullException içerisinde gelen parametrenin adını yazarız.

void Foo(Bar bar)
{
    if(bar==null)
    {
        throw new ArgumentNullException("bar");
    }
}

Bir diğer  örnek senaryo da INotifyPropertyChanged interface'inin implementasyonu.

class Bar : INotifyPropertyChanged
{
    private int foo;

    public int Foo
    {
        get { return foo; }
        set
        {
            foo = value;
            PropertyChanged(thisnew PropertyChangedEventArgs("Foo"));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

Bunlara benzer kullanımlarda karşımıza çıkan en büyük sorunlardan biri de string olarak adını yazdığımız değişkenin veya metodun adını değiştirmek. Bu değişikliği yaptığımızda değişkenin adını string olarak yazdığımız için Visual Studio isim değiştirme sırasında haliyle string olarak yazılan kısmı değiştirmiyor. Örneğin, ArgumentNullException fırlattığımız örnekte metoda gelen parametrenin adını değiştirirsek aşağıdaki gibi bir durumla karşılaşırız.

Parametre adı değiştirme

Gördüğünüz gibi metoda gelen parametrenin adını değiştirdik ancak throw new ArgumentNullException("bar") kodu değişmedi. Bu durumda da bizim yazdığımız kodun içerisinde fırlatılan exception'ın içerisinde parametrenin adı eski adıyla kaldı. Böyle değişikler yaptığımız durumlarda string olarak değişkenin, metodun veya herhangi bir elemanın adını yazmak yerine C# 6.0 ile beraber gelecek olan nameof expression'ı kullanarak elemanın ismini yazma işini compilera bırakıyoruz.

void Foo(Bar bar)
{
    if (bar == null)
    {
        throw new ArgumentNullException(nameof(bar));
    }
}
INotifyPropertyChanged interface'inin nameof expression ile implemente edilmiş hali şu şekilde olacak.
class Bar : INotifyPropertyChanged
{
    private int foo;

    public int Foo
    {
        get { return foo; }
        set
        {
            foo = value;
            PropertyChanged(thisnew PropertyChangedEventArgs(nameof(Foo));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

Nameof expression kullanarak elemanların isimlerini alırsak bu elemanların isimlerinde değişiklik yaptığımızda da Visual Studio bize yardımcı olacak ve nameof expression'ın içerisindeki elemanın adını da değiştirecektir.

Parametre adı değiştirme nameof Peki arka planda neler oluyor derseniz, compiler yazdığınız kodu derlerken nameof expression gördüğü yerlerde verdiğiniz elemanın adını hardcode ediyor ve string olarak yazıyor. Nameof expressionlar her ne kadar ufak bir yenilik gibi gözükse de biz developerların hatalı kod yazmasını önlemesi nedeniyle bence önemli ve güzel bir yenilik olmuş.


Yorum Gönder