C# 6.0 – Expression Bodied Functions

   C# 6 ile birlikte gelen yenilikleri incelediğimiz makale serisinde sırada Expression Bodied Functions (İfade Gövdeli Fonksiyonlar) var. Expression Bodied Functions ile birlikte; Lambda ifadeleri ile birlikte tanıştığımız sadeleşmiş fonksiyon ifadelerindeki kullanım kolaylığı sınıfların üye fonksiyonlarına da taşınmakta. Buna göre artık basit fonksiyonlarımızı lambda ifadelerine benzer şekilde tanımlayabilmemiz mümkün oluyor.

public void Yazdir(){
    Console.Writeline(Adi + " " + Soyadi);
}

   Yukarıdaki fonksiyonu ele alalım. Artık böylesi basit fonksiyonlarda süslü parantezler ile fonksiyonun sınırlarını belirtmeye gerek kalmıyor. Fonksiyonumuzu yeniden ele alıp ifade gövdeli olarak yazdığımızda fonksiyonumuzun sınırları => ile ; karakterleri ile belirtilmiş oluyor. Buna göre aynı ifadenin aşağıdaki şekilde yazılabilmesi de artık mümkün;

public void Yazdir() => Console.Writeline(Adi + " " + Soyadi);

Önceki makalelerimde örnek olarak kullandığım öğrenci sınıfını hatırlayın;

public class Ogrenci {
    public string Adi { get; } = "Fatih";
    public string Soyadi { get;  } = "Boy"; 

    public void Yazdir(){
        Console.Writeline(Adi + " " + Soyadi);
    }
}

Bu sınıf artık şu şekilde yazılabilir;

public class Ogrenci {
    public string Adi { get; } = "Fatih";
    public string Soyadi { get;  } = "Boy"; 

    public void Yazdir() => Console.Writeline(Adi + " " + Soyadi);
}

   Örneğimizdeki gibi geri dönüş değeri olmayan fonksiyonlar dışında geri dönüş değerine sahip fonksiyonlar da benzer şekilde ifade gövdeli fonksiyonlara dönüştürülebilir;

public string TamAdiGetir() => Adi + " " + Soyadi;

   Şimdi, bu noktada durum, bir adım geriye çekilip şimdiye kadar paylaştıklarıma göz attığımızda tüm fonksiyonlar için lambda ifadelerine benzer şekilde ifadeler kullanabileceğimizi gördük. C# bilgilerimizi biraz kurcalarsak, property’lerin de aslında derleme zamanında fonksiyonlara dönüştürüldüğünü, kullanıldıkları her yerin fonksiyon çağrısına dönüştürüldüğünü hatırlayabiliriz. Bu bakış açısıyla property’ler de ifade gövdeli şekilde yazılabilir.

Bir önceki örneğimde paylaştığım TamAdiGetir fonksiyonu property’e kolaylıkla dönüştürülebilir;

public string TamAdi{
    get { 
       return Adi + " " + Soyadi; 
   }
}

Aynı ifadeyi artık şu şekilde yazabilmemiz de mümkün;

public string TamAdi => Adi + " " + Soyadi;

   Makalemin başında paylaştığımız örneğimiz son durumda şu şekilde de yazılabilir duruma geldi;

public class Ogrenci {
    public string Adi { get; } = "Fatih";
    public string Soyadi { get;  } = "Boy";
    public string TamAdi => Adi + " " + Soyadi;
}
   Dikkat ederseniz örneklerimiz sadece getter’a sahip olan property’ler için. Getter ve Setter’a sahip property’lerin ifade gövdeli şekilde yazılması durumunda karşımıza karışık bir söz dizimin çıkması bunun en büyük nedeni. Bu sebeple, sadece getter-only property’ler ifade gövdeli şekilde yazılabilmektedir.

   Fonksiyonlar ve getter-only property’ler yanında tür dönüşüm operatörlerinde de ifade gövdelerinin kullanımı mümkün;

public static implicit operatör string(Ogrenci ogrenci) => öğrenci.Adi + " " + öğrenci.Soyadi;

   Tabi ki ifade gövdelerinin kullanımı sadece tür dönüşüm operatörleri ile sınırlı tutulmamış. Tüm kullanıcı tanımlı operatörlerde ifade gövdelerinin kullanılması mümkün.

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

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