C++ Lambda İfadeleri: İsimsiz Fonksiyonlar ve Modern Kullanım

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​


ÖzellikNormal FonksiyonLambda İfadesi
İsimZorunlu.İsimsiz (Anonim).
Kapsam ErişimiSadece parametreler ve global.Yerel değişkenleri yakalayabilir.
Tanımlama YeriSı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.
 
Geri
Üst