Skip to content

Lambda Expressions

Genel Bakış

Lambda Expressions (Lambda İfadeleri), C#'ta anonim fonksiyonlar oluşturmak için kullanılan kısa ve öz bir sözdizimidir. Lambda ifadeleri, özellikle LINQ sorgularında ve fonksiyonel programlama yaklaşımlarında yaygın olarak kullanılır.

Temel Lambda İfadeleri

  1. Basit Lambda İfadesi

    // Tek parametreli lambda
    Func<int, int> square = x => x * x;
    int result = square(5); // 25
    
    // Çoklu parametreli lambda
    Func<int, int, int> add = (x, y) => x + y;
    int sum = add(3, 4); // 7
    

  2. Statement Lambda

    Action<string> printMessage = message =>
    {
        Console.WriteLine($"Mesaj: {message}");
        Console.WriteLine($"Uzunluk: {message.Length}");
    };
    
    printMessage("Merhaba Dünya");
    

  3. Expression Lambda

    Func<int, bool> isEven = x => x % 2 == 0;
    bool result = isEven(4); // true
    

Lambda ve Delegeler

  1. Func Delegate

    // Son parametre dönüş tipini belirtir
    Func<int, int, int> multiply = (x, y) => x * y;
    int product = multiply(5, 3); // 15
    

  2. Action Delegate

    // Dönüş değeri olmayan işlemler için
    Action<string> log = message => Console.WriteLine(message);
    log("Hata oluştu!");
    

  3. Predicate Delegate

    // Boolean dönen işlemler için
    Predicate<int> isPositive = x => x > 0;
    bool result = isPositive(-5); // false
    

Lambda ve LINQ

  1. Where Kullanımı

    var numbers = new List<int> { 1, 2, 3, 4, 5 };
    var evenNumbers = numbers.Where(x => x % 2 == 0);
    

  2. Select Kullanımı

    var names = new List<string> { "Ahmet", "Mehmet", "Ayşe" };
    var nameLengths = names.Select(name => name.Length);
    

  3. OrderBy Kullanımı

    var products = new List<Product>();
    var sortedProducts = products.OrderBy(p => p.Price);
    

Lambda ve Event Handler'lar

button.Click += (sender, e) =>
{
    MessageBox.Show("Butona tıklandı!");
};

Lambda ve Asenkron Programlama

async Task ProcessData()
{
    await Task.Run(() =>
    {
        // Uzun süren işlem
        Thread.Sleep(1000);
        Console.WriteLine("İşlem tamamlandı");
    });
}

Lambda ve Closure'lar

int multiplier = 2;
Func<int, int> multiply = x => x * multiplier;
int result = multiply(5); // 10

// multiplier değiştiğinde
multiplier = 3;
result = multiply(5); // 15

Lambda Best Practices

  1. İsimlendirme

    // İyi
    Func<int, int> square = x => x * x;
    
    // Kötü
    Func<int, int> f = x => x * x;
    

  2. Karmaşıklık

    // İyi
    Func<int, bool> isEven = x => x % 2 == 0;
    
    // Kötü (çok karmaşık)
    Func<int, bool> complexCheck = x => 
    {
        var y = x * 2;
        var z = y + 5;
        return z % 3 == 0 && x > 10;
    };
    

  3. Okunabilirlik

    // İyi
    Func<string, bool> isValid = name => 
        !string.IsNullOrEmpty(name) && 
        name.Length >= 3;
    
    // Kötü
    Func<string, bool> isValid = name => !string.IsNullOrEmpty(name) && name.Length >= 3;
    

Mülakat Soruları

  1. Lambda Temelleri
  2. Lambda ifadesi nedir?
  3. Lambda ifadelerinin avantajları nelerdir?
  4. Lambda ifadeleri ve anonim metodlar arasındaki farklar nelerdir?

  5. Lambda Sözdizimi

  6. Lambda ifadelerinin temel sözdizimi nasıldır?
  7. Statement lambda ve expression lambda arasındaki farklar nelerdir?
  8. Lambda ifadelerinde parametre tipleri nasıl belirtilir?

  9. Lambda ve Delegeler

  10. Lambda ifadeleri hangi delegate tipleriyle kullanılabilir?
  11. Func, Action ve Predicate delegate'leri arasındaki farklar nelerdir?
  12. Lambda ifadelerinde delegate dönüşümü nasıl çalışır?

  13. Lambda ve LINQ

  14. Lambda ifadeleri LINQ sorgularında nasıl kullanılır?
  15. LINQ metodlarında lambda ifadelerinin kullanım örnekleri nelerdir?
  16. Lambda ifadeleri ve extension metodlar arasındaki ilişki nedir?

  17. Lambda ve Closure'lar

  18. Closure nedir ve nasıl çalışır?
  19. Lambda ifadelerinde closure kullanımının avantajları ve dezavantajları nelerdir?
  20. Closure'larda memory leak riski nasıl önlenir?

  21. Lambda ve Performans

  22. Lambda ifadelerinin performans etkisi nedir?
  23. Lambda ifadelerinde boxing/unboxing nasıl önlenir?
  24. Lambda ifadelerinin derleme sürecindeki davranışı nasıldır?

  25. Lambda ve Asenkron Programlama

  26. Lambda ifadeleri asenkron metodlarda nasıl kullanılır?
  27. Task.Run ile lambda kullanımı nasıl yapılır?
  28. Asenkron lambda ifadelerinde exception handling nasıl yapılır?

  29. Lambda ve Event Handling

  30. Lambda ifadeleri event handler'larda nasıl kullanılır?
  31. Event handler'larda lambda kullanmanın avantajları ve dezavantajları nelerdir?
  32. Event handler'larda memory leak riski nasıl önlenir?

  33. Lambda Best Practices

  34. Lambda ifadeleri yazarken dikkat edilmesi gerekenler nelerdir?
  35. Lambda ifadelerinde okunabilirlik nasıl sağlanır?
  36. Lambda ifadelerinde test edilebilirlik nasıl sağlanır?

  37. Lambda ve Fonksiyonel Programlama

    • Lambda ifadeleri fonksiyonel programlama yaklaşımında nasıl kullanılır?
    • Higher-order fonksiyonlarda lambda kullanımı nasıl yapılır?
    • Lambda ifadeleri ve immutability arasındaki ilişki nedir?

Örnek Kod Soruları

  1. Lambda ile Filtreleme

    public static IEnumerable<T> Filter<T>(IEnumerable<T> source, Func<T, bool> predicate)
    {
        // Implementasyon
    }
    

  2. Lambda ile Dönüşüm

    public static IEnumerable<TResult> Transform<T, TResult>(
        IEnumerable<T> source, 
        Func<T, TResult> transform)
    {
        // Implementasyon
    }
    

  3. Lambda ile Toplama

    public static T Aggregate<T>(
        IEnumerable<T> source, 
        Func<T, T, T> accumulator)
    {
        // Implementasyon
    }
    

  4. Lambda ile Sıralama

    public static IEnumerable<T> SortBy<T, TKey>(
        IEnumerable<T> source, 
        Func<T, TKey> keySelector)
    {
        // Implementasyon
    }
    

  5. Lambda ile Gruplama

    public static IEnumerable<IGrouping<TKey, T>> GroupBy<T, TKey>(
        IEnumerable<T> source, 
        Func<T, TKey> keySelector)
    {
        // Implementasyon
    }
    

Kaynaklar