Lambda İfadeleri (Lambda Expressions): Giriş
Daha önce Anonim yani İsimsiz metodlardan bahsetmiştik. Bir Lambda İfadesi de aslında Anonim bir Fonksiyondur. Metod değil de Fonksiyon olarak tanımladığımıza dikkat çekmek isterim. Bu fonksiyonlar basit bir ifade (expression) içerebileceği gibi bir ifade bloğu (statement) da içerebilirler. Ama temelde belli bir giriş değerine karşılık bir sonuç üreten fonksiyonlardır.
Lambda ifadelerinde mutlaka Lambda Operatörü =>
bulunur. Bu operatörün sol tarafındaki belirteçler fonksiyonun giriş değerlerini belirtir. Operatörün sağında ise fonksiyonun döndüreceği değeri üreten ifade ya da ifade bloğu yer alır. Örneğin aşağıdaki geçerli bir Lambda İfadesidir:
x => 2*x + 1
Bu ifadenin anlamı x değerini parametre alarak 2*x + 1 işleminin sonucunu geriye döndüren bir Fonksiyondur.
Nerede ve Nasıl Kullanılır?
Lambda İfadelerine yazım şekliyle kısaca giriş yapmış olduk; nerede ve nasıl kullanıldıklarıyla devam edelim.
Lambda ifadeleri LINQ (Language Integrated Query) sorgularında where bloğunda kullanılırlar. Aslında bu da bizi Enumarable sınıfındaki Where metoduna götürüyor. Anlaşılır olması için çok basit bir örnek üzerinde devam edelim:
int[] a = new int[]{5, 8, 13, 3, 14, 26};
Altı tamsayı değer içeren bir dizi oluşturduk.
Visual Studio'nun IntelliSense özelliğini kullanarak a dizisinin metodlarına baktığımızda bir çok Extension Method görüyoruz. Bu metodlar aslında IEnumarable arabirimini sağlayan tüm dizi, liste vb. yapılarda kullanılabilir durumda. Bu metodlardan şu anda Where metoduyla ilgileniyoruz. Where metodunun parametre yapısına bakacak olursak;
Func<int,bool>
tipinde bir parametre istiyor. Aslında bu tip bir Lambda İfadesi'ne karşılık geliyor. Yani, giriş değeri olarak int alan ve dönüş değeri olarak bool döndüren bir ifade ya da diğer bir deyişle Fonksiyon.
Örneğimizi devam ettirelim. Where metodunun istediği parametreyi oluşturalım.
IEnumerable b = a.Where(x => x >= 8)
Bu şekilde şunu demiş olduk: a dizisinden öyle elemanları seçelim ki seçim için bir fonksiyon kullanalım; bu fonksiyona a dizisindeki her bir elemanı sırayla parametre olarak geçirelim; bu fonksiyon da bize parametre olarak geçirilen bu değerin 8'den büyükeşit olma durumunu geri döndürsün. Böylece Where metodu da true olarak dönen her bir değeri içeren yeni bir diziyi geri döndürür. Sonuç olarak b dizisinin elemanlarına bakacak olursak 8, 13, 14 ve 26'yı görmemiz gerekir. Bu arada b artık bir IEnumerable
, yani int[]
değil.
Madem ki lambda ifadesini Func
tipinde bir parametre bekleyen bir metodda kullanabildik; yukarıdaki örneği başka türlü nasıl yazabilirdik bir bakalım.
Func<int, bool> ozelFonksiyon = x => x >= 8;
IEnumerable b = a.Where(ozelFonksiyon);
Bu örnek ile kullandığımız lambda ifadesini isimlendirmiş olduk. Sonuçta farkeden birşey olmadı.
Sonuç ve Değerlendirme
Bu yazı lambda ifadelerini kısaca tanımlamak ve ne oldukları hakkında kısaca pratik bilgi vermeyi amaçlıyor. Elbette ki lambda ifadeleri daha geniş ve kapsamlı bir konu. LINQ ile birlikte daha gerçekçi örnekler üzerinde anlatıldığında daha anlaşılır olacaktır. Bu yazıda en azından görmüş olduk ki zahmetli bir şekilde delege metodlar tanımlamak ve bunları kullanmaktansa jenerik desteğiyle birlikte pratik ve güçlü sözdizimiyle lambda ifadelerini kullanmak çok daha kolay ve avantajlı.
- 11563 okunma
Yorumlar
2 yorumÇok teşekkür ederim. Gerçekten çok işime yaradı. Başarılar.
çok teşekkürler güzel anlatım
Yeni yorum gönder