crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
C# Lambda İfadeleri ve Hazır Temsilciler (Action, Func, Predicate)
Delegate, bir metodun imzasını (dönüş tipi ve aldığı parametreler) tutan bir "elçi" gibidir. Metotların kendisini değil, adresini taşır. Lambda ifadeleri (=>) ise bu elçilere en kısa yoldan görev atamamızı sağlar.
1. Lambda İfadeleri: Kodun Şiirsel Hali
Lambda ifadeleri, "Girdi => İşlem" mantığıyla çalışır. Klasik metot tanımlama yükünü ortadan kaldırır.
C#:
// Klasik yöntem
public int KareAl(int x) { return x * x; }
// Lambda yöntemi (isimsiz fonksiyon)
(x) => x * x;
2. Hazır Temsilciler: Action, Func ve Predicate
C# geliştiricileri her seferinde yeni bir delegate tanımlamak zorunda kalmasın diye Microsoft bize üç tane hazır kalıp sunmuştur:
A) Action: "Sadece Yap!"
Geriye değer döndürmeyen (void) metotları temsil eder. 16 taneye kadar parametre alabilir.
C#:
Action<string> selamla = (isim) => Console.WriteLine($"Merhaba {isim}");
selamla("Gökhan"); // Çıktı: Merhaba Gökhan
B) Func: "Yap ve Sonucu Getir!"
Geriye mutlaka bir değer döndüren metotları temsil eder. En son yazılan tip, geri dönüş tipidir.
C#:
// İlk iki int parametre, son int ise dönüş tipi
Func<int, int, int> topla = (s1, s2) => s1 + s2;
int sonuc = topla(5, 10); // Sonuç: 15
C) Predicate: "Doğru mu Yanlış mı?"
Sadece bir parametre alır ve geriye her zaman bool** (true/false) döndürür. Genellikle filtreleme işlerinde kullanılır.
C#:
Predicate<int> ciftMi = (sayi) => sayi % 2 == 0;
Console.WriteLine(ciftMi(8)); // Çıktı: True
3. Nerede Kullanılır? (Gerçek Hayat Örneği)
Bu yapılar en çok LINQ metotlarında karşımıza çıkar. Örneğin bir listenin içindeki elemanları filtrelemek aslında bir Predicate çalıştırmaktır.
C#:
List<string> isimler = new List<string> { "Ali", "Ayşe", "Mehmet", "Aslı" };
// Where metodu aslında bir Func<string, bool> yani Predicate bekler.
var aIleBaslayanlar = isimler.FindAll(s => s.StartsWith("A"));
Özet Karşılaştırma Tablosu
| Temsilci | Dönüş Tipi | Parametre | Kullanım Amacı |
|---|---|---|---|
| Action | Yok (void) | 0 - 16 arası | Bir işlem gerçekleştirmek. |
| Func | Var (TResult) | 0 - 16 arası | Hesaplama yapıp değer dönmek. |
| Predicate | bool | Sadece 1 tane | Koşul kontrolü yapmak. |
Sonuç
Action, Func ve Predicate yapılarını anlamak, sizi C# geliştiriciliğinde "usta" seviyesine taşır. Bu yapılar sayesinde kodunuz daha esnek, daha kısa ve daha modern hale gelir. Özellikle metotları birer veri gibi sağa sola taşımaya başladığınızda, C#'ın gerçek gücünü hissetmeye başlayacaksınız.