0Pricing
C++ Academy · Pelajaran

Ekspresi Lambda: Capture, Mutable, Generik

Tulis lambda dengan capture, semantik mutable, dan parameter auto generik

Ekspresi Lambda: Capture, Mutable, Generik adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Apa Itu Lambda?

lambda adalah objek fungsi anonim sebaris. Gunakan lambda di tempat Anda biasanya menulis fungsi kecil bernama atau struktur dengan operator().

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

Anatomi Sintaksis

Lambda memiliki empat bagian:

  • [capture] — variabel dari cakupan sekitar yang akan digunakan
  • (parameters) — seperti daftar parameter fungsi
  • -> return_type — opsional, sering kali dideduksi
  • { body }

Penangkapan Kosong

[] berarti "jangan menangkap apa pun." Lambda hanya mengakses variabel global dan statik.

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

Penangkapan Berdasarkan Nilai

Cantumkan variabel dalam klausa penangkapan untuk menyalinnya ke dalam lambda.

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

Penangkapan Berdasarkan Referensi

Tambahkan awalan & untuk menangkap berdasarkan referensi. Perubahan di dalam lambda memengaruhi variabel luar.

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

Penangkapan Bawaan: [=] dan [&]

Tangkap semua yang digunakan berdasarkan nilai dengan [=], atau semuanya berdasarkan referensi dengan [&]. Gunakan dengan hati-hati—sebisa mungkin, nyatakan secara eksplisit.

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

Lambda Mutable

Secara bawaan, penangkapan berdasarkan nilai bersifat const di dalam lambda. Tambahkan mutable agar dapat mengubahnya—perubahan tersebut hanya memengaruhi salinan di dalam lambda.

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

Deduksi Tipe Kembalian

Kompilator mendeduksi tipe kembalian dari isi fungsi. Buat tipe tersebut eksplisit jika diperlukan.

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

Lambda Generik (C++14)

Gunakan auto dalam daftar parameter untuk mendapatkan lambda generik yang bekerja pada tipe apa pun.

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

Lambda sebagai Argumen Fungsi

Algoritme STL menerima lambda sebagai predikat dan transformasi.

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

Lambda adalah Objek Fungsi

Di balik layar, kompilator menghasilkan sebuah kelas dengan operator(). Anda dapat menyimpan lambda dalam std::function atau auto.

Pemeriksaan Singkat

Di dalam lambda [n](int x) { return x * n; }, dapatkah Anda menetapkan nilai ke n tanpa menjadikan lambda tersebut mutable?

Ringkasan

Lambda adalah objek fungsi anonim sebaris. Tangkap berdasarkan nilai atau referensi, tandai dengan mutable untuk mengubah penangkapan berdasarkan nilai, dan gunakan parameter auto untuk lambda generik dalam C++14 atau yang lebih baru.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Ekspresi Lambda: Capture, Mutable, Generik” gratis?

Ya — teks lengkap “Ekspresi Lambda: Capture, Mutable, Generik” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Ekspresi Lambda: Capture, Mutable, Generik”?

Tulis lambda dengan capture, semantik mutable, dan parameter auto generik Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Ekspresi Lambda: Capture, Mutable, Generik” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. auto, decltype, dan Deduksi Tipe
  2. Range-based for, nullptr, dan enum class
  3. Ekspresi Lambda: Capture, Mutable, Generik
  4. Structured Bindings dan if-init C++17
← Kembali ke C++ Academy