C# Lambda Expressions (İfadeleri) Kullanımı

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