C# 6.0 – Expression Bodied Functions
Şahsen ben yazılımın Lambda ifadelerini severim.Dile görsel açıdan bir düzen, dilsel açıdan ayrı bir kafiye katmaktadırlar.Ayriyetten teknik olarakta Lamda ifadeleri fonksiyonel bir yapı sergilediklerinden dolayıda oldukça kullanışlıdır.C# 6.0 ile sınıf yapılarının elemanlarına Lambda ifadelerinin kullanım kolaylığı sağlanmıştır.Bu beni çok sevindirdi.Bu yazımızda sınıf elemanlarından olan metod ve property yapılarının Lambda ifadeleriyle nasıl oluşturabileceğimizi inceleyeceğiz.
Öncelikle aşağıdaki kod bloğunu inceleyelim.
public void IsimYaz() { Console.Write("Gençay Yıldız"); }
Gördüğünüz gibi bu tarz basit bir işleve sahip metodu oluşturabilmek için metodun imzasıyla beraber gövdesi oldukça uzun bir yapı sergilemektedir.Halbuki işlev olarak çok çook basit olan bu metodu C# 6.0 ile aşağıdaki gibide oluşturmamız mümkündür.
public void IsimYaz() => Console.Write("Gençay Yıldız");
Dikkat ederseniz eğer Lambda yapısından olan => ifadesini kullanarak metodumuzu oluşturmuş olduk.Bu ifade sayesinde metodumuzun sınırı scope(süslü parantez)larla kod fazlalığı sağlayarak belirlenmek zorunda kalmıyor.
Peki geri dönüş değerine sahip bir metodu nasıl Lambda ifadesiyle oluşturabiliriz? sorusunu sorabilirsiniz.
Aşağıdaki kod bloğunu inceleyin…
--- Normal Yazım --- public string IsimGonder() { return "Gençay Yıldız"; }
public string IsimGonder() => "Gençay Yıldız";
veyahut int bir değer gönderen metodsa;
public int YasiGonder() => 23;
İşte gördüğünüz gibi…
Metodumuz geriye değer gönderecekse eğer => ifadesinden sonra o değere ait bir veri girmeniz yeterli olacaktır.
Şimdi biraz C# bilgilerimizi sorgulayalım.Sınıf elemanlarından bir diğeri olan Property yapılarının özelliklerini hatırlarsak eğer, derleme zamanında arka planda fonksiyonlara dönüştürülen bir yapıya sahiptiler.Acaba fonksiyonlar için getirilen bu yenilik arka planda fonksiyolist bir yapı gösteren Propertyler için de uygun mu?
Tabi yazının girişinde metodlar ve propertyler için bu yapıyı kullanacağımızdan bahsettiğim için buradaki yaratmaya çalıştığım gerilimli havanın fos olduğunun bende farkındayım.Neyse 🙂 yola devam edelim..
public string Cinsiyet { get; }
veya
public string Cinsiyet { get { return "Erkek"; } }
şeklinde tanımlayabileceğimiz propertylerimizi aşağıdaki gibi Lambda ifadesiyle tanımlayabilir ve ilk değeri verebiliriz.
public string Cinsiyet => "Erkek";
Gördüğünüz gibi Lambda ifadesiyle tanımlanan property bu şekilde olmaktadır.Lakin dikkat ettiniz mi?Örnekte verdiğim property yapıları sadece okunabilir(read only) özelliğine sahiptirler.Bu demek oluyor ki, Lambda ifadesini read only özelliğine sahip olmayan propertylerde kullanamayız.
C# 6.0 – Auto Property Initializers başlıklı yazımda da property yapılarının tanımlandıkları anda ilk değerlerinin atanmasıyla ilgili gelen yenilikten bahsetmiştim.Haliyle bu yazımda da property yapılarının kullanımına Lambda ile müdahale ettik.O yüzden iki yazıdaki kodları bu yazıda property yapısına özel olarak görsel bir özetle yazımızı sonlandırmak isterim.
public string AdiSoyadi { get; set; } public int Yas { get; set; } = 23; public string Cinsiyet => "Erkek";
Sonraki yazılarımızda görüşmek üzere…
İyi çalışmalar dilerim.