-- C#

C# 6.0 – Expression Bodied Functions

C# 6.0 ile birlikte gelen özelliklerden biri de Expression Bodied Functions(İfade Gövdeli Fonksiyonlar), C# 6.0’ın temel amacı yazılım geliştirmeyi kolaylaştırmak ve daha az kod yazılmasını sağlamak olduğu için bu özelliğin neden geliştirildiğini daha kolay anlayabiliyoruz.

Şu ana kadar C# da fonksiyon(metot) geliştirirken standart bir söz dizimi kuralı vardı ve buna uymamız gerekiyordu. Açıkcası bazı durumlarda bu söz dizimi kod kalabalığından başka işe yaramayabiliyordu. Mesela basit bir şekilde tek bir değer döndürecek ya da ekrana bir değer yazdıracak metot için 4 satır kod yazmak gereksizdi. İşte bu tür sorunları çözmek için Expression Bodied Functions geliştirildi.

Şimdi bu özellik nedir, nasıl kullanılır buna bakalım.

Bir kullanıcının ad ve soyad bilgilerini ekrana yazdıran metoda ihtiyacımız var. Bu durumda yazmamız gereken en basit metod aşağıdaki gibi olabilir.

public void AdYazdir()
{
      Console.WriteLine("Tam Ad : " + ad + " " + soyad);
}

Sizcede bu kadar basit bir işlem için gereğinden fazla kod yazmadık mı? Şimdi aynı işlemi yapan metodu Expression Bodied Functions yöntemiyle yazalım.

public void AdYazdir() => Console.WriteLine("Tam Ad : " + ad + " " + soyad);

Evet, görüldüğü üzere aynı işi yapan iki metod tanımlaması arasında açık ara kodlama farkı var. Ancak detaya baktığımızda değişen tek şey süslü parantezlerin( { } ) kaldırılması ve metod ile komutların ilişkilendirilmesi için bir lambda expression( => ) kullanımını getirmesi olmuştur. Lambda yönteminin bir çok işi kolaylaştırıp kısalttığını tecrübe eden yazılımcılar için bu kod daha anlamlı gelecektir.

Peki bu yöntem sınıf içerisinde nasıl kullanılır?

public class Kullanici
{
    public string Ad {get;} = "Cihan"
    public string Soyad {get;} = "Özhan";
    public string Email {get;} = "cihan.ozhan@hotmail.com";

    public void AdYazdir()
    {
          Console.WriteLine("Tam Ad : " + Ad + " " + Soyad);
    }

    public void DetayYazdir()
    {
          Console.WriteLine("Tam ad : " + Ad + " " + Soyad + Environment.NewLine + "Email : " + Email);
    }
}

Yukarıdaki Kullanıcı isimli sınıfımız 3 temel özelliğe ve bunları ekranda yazdıran 2 adet metoda sahiptir. Bu kullanım işimizi görsede kodlama açısından daha sadeleştirilebilir.

C# 6.0 Expression Bodied Functions Yöntemi

public class Kullanici
{
    public string Ad {get;} = "Cihan"
    public string Soyad {get;} = "Özhan";
    public string Email {get;} = "cihan.ozhan@hotmail.com";

    public void AdYazdir() => Console.WriteLine("Tam Ad : " + Ad + " " + Soyad);
    public void DetayYazdir() => Console.WriteLine("Tam ad : " + Ad + " " + Soyad + Environment.NewLine + "Email : " + Email);
}

Sizce de Kullanıcı sınıfımız daha sade bir kullanıma sahip olmadı mı?

Bu yeni özelliğin genel prensiplerine değinecek olursak, ilk söyleyeceğimiz şey bu yöntemin sadece ReadOnly Property’lerde kullanılabiliyor olmasıdır. Bunun nedeni, programlama tarafında iş süreçlerini sıkıntıya sokabilecek söz dizimine engel olmaktır.

Property dediğimiz kavramın mimari olarak dayandığı nokta Getter ve Setter metodlarıdır. Java geliştiricilerinin yakinen bildiği Getter ve Setter metodları kullanmak yerine C# da Property’leri kullanıyoruz. Bir javacı getKullaniciAd(), setKullaniciAd(string ad) şeklinde iki metod yazmalıyken C# geliştiricileri KullaniciAd diye bir property geliştirir ve bu property’nin get; set; özelliklerini kullanarak işlemini gerçekleştirir.

Java Geliştirici:

public void setKullaniciAd(string ad)
{
     ...
}

ve..

public string getKullaniciAd()
{
     ...
}

C# Geliştirici:

public string KullaniciAd
{
    get { return kullaniciAd; }
    set { kullaniciAd = value; }
}

Peki property’lerde bu yeni yöntem nasıl kullanılır?

Temel olarak aynı diyebiliriz. Örneğin;

Şu anki yöntem ile;

public string TamAd
{
    get { return Ad + " " Soyad; }
}

Yeni yöntem ile;

public string TamAd => Ad + " " + Soyad;

🙂 Bu kadar…

Açıkcası C# diline yeni özellikler eklendikçe, ünlü IDE’miz ve Framework’ümüz yeni versiyonları çıkardıkça dahada güzelleşiyor. Yaşlandıkça güzelleşiyor…
Umarım bu kısa yazımla yeni gelen Expression Bodied Functions özelliğini anlatabilmişimdir.

İyi çalışmalar.
Cihan Özhan

Yorumla

Yorum