C# dilindeki Lambda expressions (ifadeleri), fonksiyonlar gibi kullanılır. Tek fark, Lambda ifadelerinde girdiğiniz değerin türünü belirtmenize gerek olmaması ve böylece kullanımını daha esnek hale getirmesidir.
Lambda operatörünün gösterim şekli: ( => ) , Lambda ifadesi iki bölüme ayrılmıştır, sol taraf giriş (input) ve sağ taraf ifadedir (expression).
Lambda İfadeleri iki tür olabilir:
- Expression (ifade) Lambda: Giriş (input) ve ifadeden (expression) oluşur.
Sözdizimi (Syntax):
input => expression;
- Statement (bildirim) Lambda: Giriş (input) ve ürütülecek bir dizi ifadeden (statement) oluşur.
Sözdizimi (Syntax):
input => { statements };
Yukarıdaki kavramları daha iyi anlamak için bazı örnekler yapalım.
Örnek 1: Aşağıda verilen kodda, tamsayıların bir listesine sahibiz. İlk lambda ifadesi her bir elemanın karesini döndürür. { x => x*x } İkincisi ise hangi değerlerin 2 ile bölünebileceğini yani çift sayıları bulmak için kullanılır. { x => (x % 3) == 0 } Ve son olarak foreach döngüsü, datalar üzerinde görüntüleme yapmak için kullanılır.
// Sayıları tutmak için List oluşturalım.
List<int> sayilar = new List<int>() {34, 7, 24, 30, 17, 9, 27, 20, 18, 53};
// Listeyi foreach ile gösterelim.
Console.Write("Sayı Listesi : ");
foreach (var sayi in sayilar)
{
Console.Write("{0} ", sayi);
}
Console.WriteLine();
// Lambda expression kullanarak listede ki sayıların karelerini hesaplayalım.
var kareleri = sayilar.Select(x => x * x);
// Kareleri foreach ile gösterelim.
Console.Write("Karesi : ");
foreach (var kare in kareleri)
{
Console.Write("{0} ", kare);
}
Console.WriteLine();
// Lambda expression kullanarak listede ki 2 bölünebilen sayıları (çift) hesaplayalım.
List<int> divBy3 = sayilar.FindAll(x => (x % 2) == 0);
// Çift sayıları foreach ile gösterelim.
Console.Write("Çift Sayılar : ");
foreach (var value in divBy3)
{
Console.Write("{0} ", value);
}
Console.WriteLine();
Sonuç:
Sayı Listesi : 34 7 24 30 17 9 27 20 18 53
Karesi : 1156 49 576 900 289 81 729 400 324 2809
Çift Sayılar : 34 24 30 20 18
Örnek 2: Lambda ifadelerini özellikle kullanıcı tanımlı sınıflarlar da sıklıkla kullanırız. Aşağıda verilen kod, tanımladığımız ürün sınıfı üzerinden tanımlanan listeden fiyat değerine göre yaptığımız sorguyu gösterir.
internal class Program
{
private static void Main(string[] args)
{
// List üzerinden Product sınıfına veri ekleyelim.
List<Product> products = new List<Product>()
{
new Product{ Id = 1, Name = "Kalem-1", Price= 20 },
new Product{ Id = 2, Name = "Kalem-2", Price=30 },
new Product{ Id = 3, Name = "Kalem-3", Price = 55 },
new Product{ Id = 4, Name = "Kalem-4", Price = 60 },
new Product{ Id = 5, Name = "Kalem-5", Price=65 }
};
// Lambda expresion ile price 50 den büyük olan verileri getirelim.
var newProducts = products.FindAll(x => x.Price > 50).ToList();
foreach (var product in newProducts)
{
Console.WriteLine(product.Name + " " + product.Price);
}
}
}
class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
Sonuç:
Kalem-3 55
Kalem-4 60
Kalem-5 65
One comment
Comments are closed.