Home TürkçeC# C# 6.0 – Expression Bodied Functions

C# 6.0 – Expression Bodied Functions

by Fatih Boy
0 comment

   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.

Şu Yazıları da Sevebilirsiniz

Leave a Comment

* Bu formu kullanarak, verilerinizin bu web sitesi tarafından saklanması ve kullanılmasını kabul ediyorsunuz.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bunu kabul ettiğinizi varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul Et Daha Fazla Bilgi