C# Lambda İfadeleri
C#’ta lambda ifadelerini öğrenin. Kısa sözdizimi, Func ve Action kullanımı ile LINQ sorgularında pratik örnekler keşfedin.
C#’ta lambda ifadeleri, anonim (isimsiz) metotları kısa ve okunabilir bir şekilde yazmayı sağlar.
=> (lambda operatörü) kullanılarak tanımlanır.
Lambda ifadeleri özellikle LINQ sorgularında, olay (event) aboneliklerinde ve fonksiyonel programlama tarzında yoğun olarak kullanılır.
Temel Lambda Sözdizimi
Bir lambda ifadesi, parametre listesi ve gövdeden oluşur.
Basit ifadelerde süslü parantezlere gerek yoktur, çok satırlı gövde kullanıldığında parantez ve return yazılabilir.
// Tek parametre, tek satırlık ifade
Func<int, int> kare = x => x * x;
Console.WriteLine(kare(5)); // 25
// Çok parametreli lambda
Func<int, int, int> topla = (a, b) => a + b;
Console.WriteLine(topla(3, 4)); // 7
// Çok satırlı lambda
Func<int, int, int> carp = (a, b) =>
{
Console.WriteLine($"Çarpılıyor: {a} * {b}");
return a * b;
};
Console.WriteLine(carp(2, 6)); // 12
Action ve Func ile Lambda
Lambda ifadeleri genellikle Action ve Func türleriyle birlikte kullanılır:
- Action: Geri dönüş değeri olmayan metotları temsil eder.
- Func<T,..., TResult>: Sonucu olan metotları temsil eder.
Action selamla = () => Console.WriteLine("Merhaba!");
selamla(); // Merhaba!
Func<string, int> uzunluk = s => s.Length;
Console.WriteLine(uzunluk("Lambda")); // 6
Lambda ve LINQ
Lambda ifadeleri en çok LINQ sorgularında kullanılır. Koleksiyonlar üzerinde filtreleme, sıralama ve projeksiyon işlemleri kolayca yapılabilir.
var sayilar = new List<int> { 1, 2, 3, 4, 5, 6 };
// Çift sayıları filtrele
var ciftler = sayilar.Where(x => x % 2 == 0);
Console.WriteLine(string.Join(", ", ciftler)); // 2, 4, 6
// Kareleri hesapla
var kareler = sayilar.Select(x => x * x);
Console.WriteLine(string.Join(", ", kareler)); // 1, 4, 9, 16, 25, 36
Event ile Lambda Kullanımı
Lambda ifadeleri, olayları yakalamak için pratik bir yöntemdir. Böylece ayrı bir metot tanımlamadan kısa bir şekilde olay yakalanabilir.
public class Button
{
public event EventHandler? Click;
public void SimulateClick()
{
Console.WriteLine("Butona basıldı!");
Click?.Invoke(this, EventArgs.Empty);
}
}
class Program
{
static void Main()
{
var btn = new Button();
// Event'i lambda ile yakala
btn.Click += (s, e) => Console.WriteLine("Olay: Butona tıklandı.");
btn.SimulateClick();
}
}
Kapanış (Closure) ve Değişken Yakalama
Lambda ifadeleri tanımlandıkları scope’taki değişkenlere erişebilir. Bu duruma closure denir.
int sayac = 0;
Action arttir = () =>
{
sayac++;
Console.WriteLine($"Sayaç: {sayac}");
};
arttir(); // Sayaç: 1
arttir(); // Sayaç: 2
Burada lambda ifadesi dışarıdaki sayac değişkenini “yakalar” ve üzerinde işlem yapmaya devam eder.
Örnek: Filtreleme ve Raporlama
Bir mağaza uygulamasında ürünleri fiyatlarına göre filtrelemek ve raporlamak için lambda ifadeleri kullanılabilir.
public class Product
{
public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
}
class Program
{
static void Main()
{
var products = new List<Product>
{
new Product { Name = "Laptop", Price = 25000m },
new Product { Name = "Mouse", Price = 300m },
new Product { Name = "Klavye", Price = 600m },
new Product { Name = "Monitör", Price = 4500m }
};
// 1000 TL üzerindeki ürünleri bul
var pahaliUrunler = products.Where(p => p.Price > 1000);
foreach (var p in pahaliUrunler)
{
Console.WriteLine($"{p.Name} - {p.Price} TL");
}
// Ortalama fiyat hesapla
var ort = products.Average(p => p.Price);
Console.WriteLine($"Ortalama fiyat: {ort:0.00} TL");
}
}
TL;DR
=>operatörüyle kısa ve anonim metotlar tanımlanır.ActionveFuncile birlikte yaygın kullanılır.- LINQ’ta filtreleme, seçme, sıralama için vazgeçilmezdir.
- Event aboneliklerinde ek kod yazmadan kullanılabilir.
- Kapanış (closure) ile dışarıdaki değişkenlere erişebilir.
İlişkili Makaleler
C# Delegates ve Events
C#’ta delegate ve event kavramlarını öğrenin. Olay tabanlı programlama, callback mantığı ve kullanım senaryoları örneklerle anlatılıyor.
C# Döngüler (for, foreach, while, do-while)
C#’ta for, foreach, while ve do-while döngülerinin nasıl kullanıldığını öğrenin. Tekrar eden işlemleri yönetmek için pratik örnekler keşfedin.
C# Extension Metotlar
C#’ta extension metotları öğrenin. Mevcut sınıfları değiştirmeden yeni metotlar eklemeyi örneklerle keşfedin.
C# Metotlar ve Parametre Kullanımı
C#’ta metot tanımlama ve parametre kullanımını öğrenin. Değer ve referans parametreleri, varsayılan parametreler ve örneklerle.
C# Operatörleri ve İfadeler
C#’ta operatörler ve ifadeler: aritmetik, karşılaştırma, mantıksal, artırma/azaltma, ternary ve null-coalescing kullanımı.