crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Lambda İfadeleri: Fonksiyonları Yerinde ve Hızlıca Tanımlayın
Bir fonksiyonu sadece tek bir yerde kullanacaksanız, onu dışarıda uzun uzun tanımlamak yerine tam ihtiyaç duyduğunuz satırda "isimsiz" bir şekilde oluşturabilirsiniz.
1. Lambda Sözdizimi (Syntax)
Bir lambda ifadesi dört ana parçadan oluşur. Bu yapıya C++ dünyasında "Lambda Tanıtıcısı" denir:
C++:
[yakalama] (parametreler) -> donus_tipi { fonksiyon_govdesi };
2. Yakalama Bloğu (Capture Clause): [] Nedir?
Lambdanın en özel yanı, tanımlandığı kapsamdaki (scope) değişkenlere erişebilmesidir. Köşeli parantezler içine ne yazacağınıza bağlı olarak dışarıdaki verilere ulaşabilirsiniz:
[]: Hiçbir dış değişkeni yakalamaz.
[=]: Dışarıdaki tüm değişkenleri değer olarak yakalar (kopyalar).
[&]: Dışarıdaki tüm değişkenleri referans olarak yakalar (değişiklik yapabilir).
[x, &y]: x'i kopyalar, y'yi referans olarak alır.
C++:
int carpim = 2;
auto lambda = [carpim](int sayi) {
return sayi * carpim;
};
cout << lambda(5); // Sonuç: 10
3. STL Algoritmaları ile Kullanım
Lambdalar en çok std::sort, std::for_each veya std::find_if gibi fonksiyonlarla birlikte parlar. Ayrı bir fonksiyon yazma zahmetini ortadan kaldırırlar.
C++:
#include <vector>
#include <algorithm>
std::vector<int> sayilar = {1, 5, 2, 8, 3};
// Sayıları büyükten küçüğe sıralamak için yerinde kural tanımlama
std::sort(sayilar.begin(), sayilar.end(), [](int a, int b) {
return a > b;
});
// Sadece çift sayıları ekrana yazdır
std::for_each(sayilar.begin(), sayilar.end(), [](int n) {
if (n % 2 == 0) std::cout << n << " ";
});
4. Lambda vs. Normal Fonksiyonlar
| Özellik | Normal Fonksiyon | Lambda İfadesi |
|---|---|---|
| İsim | Zorunlu. | İsimsiz (Anonim). |
| Kapsam Erişimi | Sadece parametreler ve global. | Yerel değişkenleri yakalayabilir. |
| Tanımlama Yeri | Sınıf veya namespace dışı/içi. | Fonksiyon içinde, tam kullanım noktasında. |
Sonuç
Lambda ifadeleri, modern C++ kodunu daha temiz, daha kısa ve daha performanslı hale getirir. Eskiden "Functor" (fonksiyon nesneleri) yazarak yaptığımız karmaşık işleri artık tek bir satırda halledebiliyoruz. Ancak çok uzun ve karmaşık mantıkları lambda içinde yazmak kodun okunabilirliğini bozabilir; bu durumda geleneksel fonksiyonlara dönmek daha iyidir.