0Pricing
C++ Academy · Ders

Lambda İfadeleri: Yakalama, Değiştirilebilirlik, Genellik

Yakalamalara, mutable anlamına ve genel auto parametrelerine sahip lambda'lar yazın

Lambda İfadeleri: Yakalama, Değiştirilebilirlik, Genellik, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Lambda Nedir?

Bir lambda, satır içinde tanımlanan anonim bir işlev nesnesidir. Normalde küçük bir adlandırılmış işlev veya operator() içeren bir yapı yazacağınız yerlerde kullanınız.

auto square = [](int x) { return x * x; };
std::cout << square(5);   // 25

Sözdizimi Anatomisi

Bir lambda dört bölümden oluşur:

  • [capture] — çevreleyen kapsamdan kullanılacak değişkenler
  • (parameters) — bir işlevin parametre listesi gibidir
  • -> return_type — isteğe bağlıdır ve çoğunlukla çıkarılır
  • { body }

Boş Yakalama

[], “hiçbir şeyi yakalama” anlamına gelir. Lambda yalnızca genel ve statik değişkenlere erişir.

auto add = [](int a, int b) { return a + b; };

Değerle Yakalama

Değişkenleri lambda içine kopyalamak için onları yakalama yan tümcesinde listeleyiniz.

int n = 5;
auto times = [n](int x) { return x * n; };
n = 10;
std::cout << times(3);   // 15 (captured n was 5)

Referansla Yakalama

Referansla yakalamak için başına & ekleyiniz. Lambda içindeki değişiklikler dışarıdaki değişkeni etkiler.

int counter = 0;
auto inc = [&counter]() { ++counter; };
inc(); inc(); inc();
std::cout << counter;   // 3

Varsayılan Yakalamalar: [=] ve [&]

Kullanılan her şeyi değerle yakalamak için [=], referansla yakalamak için [&] kullanınız. Dikkatli olunuz; mümkün olduğunda açık yakalamaları tercih ediniz.

auto f = [=]() { return a + b; };   // copies a, b
auto g = [&]() { return a + b; };   // references a, b

Değiştirilebilir Lambdalar

Varsayılan olarak değerle yakalanan değişkenler lambda içinde const olur. Bunları değiştirmeye izin vermek için mutable ekleyiniz; değişiklikler yalnızca lambda kopyasını etkiler.

int n = 5;
auto f = [n]() mutable {
    n += 1;       // OK because of mutable
    return n;
};
f(); f();        // returns 6, then 7
std::cout << n;  // still 5 in outer scope

Dönüş Türü Çıkarımı

Derleyici, dönüş türünü gövdeden çıkarır. Gerektiğinde türü açıkça belirtiniz.

auto half = [](int x) -> double { return x / 2.0; };

Genel Amaçlı Lambdalar (C++14)

Her tür üzerinde çalışabilen genel amaçlı bir lambda elde etmek için parametre listesinde auto kullanınız.

auto print = [](const auto& x) { std::cout << x << "\n"; };
print(42);          // int
print("hello");    // const char*
print(3.14);       // double

İşlev Bağımsız Değişkenleri Olarak Lambdalar

STL algoritmaları, lambdaları koşul işlevleri ve dönüşümler olarak kabul eder.

std::vector<int> v = {5, 2, 8, 1};
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });

Lambdalar İşlev Nesneleridir

Derleyici, arka planda operator() içeren bir sınıf oluşturur. Lambdaları std::function veya auto içinde saklayabilirsiniz.

Kısa Sınama

[n](int x) { return x * n; } lambda'sının içinde, lambda'yı mutable yapmadan n'ye değer atayabilir misiniz?

Özet

Lambdalar anonim, satır içinde tanımlanan işlev nesneleridir. Değerle veya referansla yakalayınız, değer yakalamalarını değiştirmek için mutable belirtiniz ve C++14 ve sonraki sürümlerde genel amaçlı lambdalar için auto parametrelerini kullanınız.

Sıkça Sorulan Sorular

“Lambda İfadeleri: Yakalama, Değiştirilebilirlik, Genellik” dersi ücretsiz mi?

Evet — “Lambda İfadeleri: Yakalama, Değiştirilebilirlik, Genellik” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Lambda İfadeleri: Yakalama, Değiştirilebilirlik, Genellik” dersinde ne öğreneceğim?

Yakalamalara, mutable anlamına ve genel auto parametrelerine sahip lambda'lar yazın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Lambda İfadeleri: Yakalama, Değiştirilebilirlik, Genellik” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. auto, decltype ve Tür Çıkarımı
  2. Aralık Tabanlı for, nullptr ve enum class
  3. Lambda İfadeleri: Yakalama, Değiştirilebilirlik, Genellik
  4. Yapılandırılmış Bağlamalar ve if-init C++17
← C++ Academy Sayfasına Dön