C# Lambda İfadeleri Nedir? Nasıl Kullanılır?

c# Lambda

C# Lambda İfadeleri Nedir? Nasıl Kullanılır?

 Lambda ifadeleri sadeleştirilmiş ve anonim olan fonksiyonlardır. Lambda ifadeleri, Matematik ve Bilgisayar Bilimlerinde bulunan Lambda Calculus un C# ve Visual Basic e uyarlanmış halidir.

Basit işlemler için, özellikle yerel fonksiyonlar için oldukça can kurtarıcı bir yapısı olduğunu söylemeliyim, Unity ile birlikte kullanıldığı zaman ise DoTween gibi bir çok eklentide kullandığınız zaman yazılım kısmını daha da kolaylaştırdığını, daha doğrusu kodların okunmasını kolaylaştırdığını söylenilirim.

Örnek
i => i * i
gibi bir kullanımı bulunmaktadır.

Bu örneği biraz açıklayacak olursak burada yer alan "=>" işareti lambda işaretidir. Lambda işaretinin sol tarafı parametreyi temsil ederken sağ tarafı işlemi temsil etmektedir.

Eğer ki buradaki lambda ifadesini/fonksiyonunu normal bir fonksiyon gibi yazacak olsaydık şu şekilde olacaktı.

Örnek
int kare (int i){
 return i * i;
}

Burada anonim olmayan bir fonksiyon yazdık ve lambda ifadesinde yaptığımız işlemi de oldukça uzun bir şekilde yaptık diyebilirim.

Lambda ifadeleri anonim olur dedik, eğer yukarıdaki fonksiyonu anonim bir şekilde yazacak olsaydık nasıl yazardık bir de buna bakalım.

delegate(int i){
return i * i;
}

Burada fonksiyonun geri dönüşü en başta belli olmadığı için anonim bir fonksiyon oldu, eğer ki buradaki "delegate" kısmını silersek bir lambda fonksiyonu elde etmiş oluruz.

(int i){
return i * i;
}

Şimdi basit bir şekilde aslında anonim lambda fonksiyonumuzu oluşturduk ancak yazının ilk başında dediğimiz şey sadeleştirilmiş ve anonim olmalarıydı. Şimdi gelin bu lambda halini sadeleştirelim.

Burada süslü parantezler lambda ifadesine dönüşecektir ve fonksiyonumuz şu şekli alacaktır.

(int i ) => return i * i;

Şimdi burada yukarıda ilk başta solun parametre ve sağında ifade olduğundan bahsetmiştik. i*i zaten bir ifade olduğu için artık ";" ve "return" ifadesini kaldırabiliriz yani yeni fonksiyonumuz şu şekilde olacaktır.

(int i) => i * i 

burada isteğe bağlı olarak girilen değeri girebiliriz veya girmeyebiliriz bu tamamen size kalmıştır, eğer ki girmek istemezsek şu şekilde kullanabiliriz.

i => i * i

Yukarıda sol tarafta parametre olmasından bahsetmiştik ancak her lambda fonksiyonunda / ifadesinde parametre zorunlu değildir ve aşağıdaki gibi de kullanabilirsiniz.

() => fonksiyon()

Parametre kısmında parametre olmayabildiği gibi, birden fazla parametre değeri de alabilir aşağıdaki örnekte olduğu gibi.

(a,b) => a > b

Evet arkadaşlar Lambda ifadeleri ile ilgili yeterince bilgi verdiğimi düşünüyor ve birkaç örnek vermek istiyorum.

Örnekler

Unity de DoTween ile ilgili yazıma buradan bakabilirsiniz burada basit bir şekilde Tween oluşturmak için Lambda ifadesi kullanımını göstermiştim.

protected void OzelDonmeAnimasyonu(GameObject obje, Vector3 donmeAcisi, float animasyonTamamlanmaSuresi, Ease animasyonYumusatma, RotateMode donmeSekli, System.Action IslemSonucu)
    {
        obje.transform.DORotate(donmeAcisi, animasyonTamamlanmaSuresi, donmeSekli).SetEase(animasyonYumusatma).OnComplete(() => IslemSonucu(0));
    }
    
    void IslemSonucu(int i){
    if(i == 0){
    Debug.Log("İşlem Tamamlandı");    
    }
    }
    
    

yukarıdaki kodda da gördüğünüz gibi bir kullanım yapabiliyorsunuz.