Penggunaan Lambda Function di C++

Penggunaan Lambda Function di C++

Lambda function adalah fitur dalam C++ yang diperkenalkan sejak C++11. Fungsi ini dikenal sebagai anonymous function karena tidak memiliki nama. Lambda function mempermudah penulisan fungsi yang sederhana dan sering digunakan sekali saja, seperti fungsi callback atau ekspresi dalam algoritma STL.

Sintaks Dasar Lambda Function

Sintaks lambda function:

[ capture_list ] ( parameter_list ) -> return_type {
    // body of the lambda
};

Penjelasan Komponen:

  1. capture_list: Menentukan variabel di luar lambda yang akan digunakan di dalamnya.
  2. parameter_list: Parameter yang diterima oleh lambda (mirip dengan parameter fungsi biasa).
  3. return_type: Tipe nilai yang dikembalikan (opsional, biasanya ditentukan secara otomatis oleh compiler).
  4. Body: Berisi logika yang akan dijalankan.

Contoh sederhana:

auto lambda = []() {
    cout << "Hello, Lambda!" << endl;
};
lambda();

Output:

Hello, Lambda!

Capture List

capture_list menentukan bagaimana lambda function mengakses variabel dari lingkup di luar fungsi tersebut. Ada beberapa cara menangkap variabel:

  • Capture by Value [=] Menyalin semua variabel dari lingkup luar (read-only).
int x = 10;
auto lambda = [=]() {
    cout << x << endl; // Output: 10
};
lambda();
  • Capture by Reference [&] Mengizinkan modifikasi variabel di lingkup luar.
int x = 10;
auto lambda = [&]() {
    x++;
    cout << x << endl; // Output: 11
};
lambda();
cout << x << endl; // Output: 11
  • Capture Individual Variables Anda dapat menangkap variabel tertentu saja.
int x = 10, y = 20;
auto lambda = [x, &y]() {
    // x disalin, y dirujuk
    cout << "x: " << x << ", y: " << y << endl; // Output: x: 10, y: 20
    y++;
};
lambda();
cout << y << endl; // Output: 21

Parameter pada Lambda

Lambda function dapat menerima parameter seperti fungsi biasa.

auto add = [](int a, int b) -> int {
    return a + b;
};
cout << add(5, 3) << endl; // Output: 8

Penggunaan Lambda dalam STL

Lambda function sering digunakan dalam algoritma STL seperti std::sort, std::for_each, dan std::find_if.

  • Sort dengan Kriteria Kustom
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;

int main() {
    vector<int> vec = {5, 2, 8, 1, 3};
    sort(vec.begin(), vec.end(), [](int a, int b) {
        return a > b; // Urutkan secara menurun
    });

    for (int v : vec) {
        cout << v << " ";
    }
    return 0;
}

Output:

8 5 3 2 1
  • Menggunakan std::for_each
vector<int> vec = {1, 2, 3, 4, 5};
for_each(vec.begin(), vec.end(), [](int x) {
    cout << x * x << " "; // Cetak kuadrat elemen
});

Output:

1 4 9 16 25
  • Cari Elemen dengan std::find_if
vector<int> vec = {1, 2, 3, 4, 5};
auto it = find_if(vec.begin(), vec.end(), [](int x) {
    return x > 3;
});

if (it != vec.end()) {
    cout << "Ditemukan: " << *it << endl; // Output: Ditemukan: 4
} else {
    cout << "Tidak ditemukan!" << endl;
}

Lambda dengan Stateful Capture

Lambda dapat menyimpan status dengan menggunakan mutable untuk memodifikasi variabel yang ditangkap.

int counter = 0;
auto lambda = [counter]() mutable {
    counter++;
    return counter;
};

cout << lambda() << endl; // Output: 1
cout << lambda() << endl; // Output: 1 (karena variabel counter di-copy)

Lambda sebagai Callback

Lambda sering digunakan sebagai callback, terutama dalam program berbasis event atau asynchronous.

#include <functional>
#include <iostream>
using namespace std;

void performTask(function<void()> callback) {
    cout << "Melakukan tugas..." << endl;
    callback();
}

int main() {
    performTask([]() {
        cout << "Tugas selesai!" << endl;
    });

    return 0;
}

Output:

Melakukan tugas...
Tugas selesai!

Keuntungan Lambda Function

  1. Ringkas dan Mudah Dibaca
    Lambda function mengurangi boilerplate code dibandingkan dengan membuat fungsi secara eksplisit.
  2. Integrasi STL yang Mulus
    Lambda sangat cocok digunakan dalam algoritma STL untuk fungsi kustom.
  3. Closure Support
    Lambda dapat menangkap variabel dari lingkup luar, menjadikannya fleksibel untuk berbagai kebutuhan.

Kesimpulan

Lambda function adalah fitur yang kuat dan fleksibel di C++ untuk menulis fungsi ringan secara lebih ringkas. Mereka sangat berguna dalam pemrograman modern, terutama saat bekerja dengan STL, callback, atau ekspresi singkat yang hanya digunakan sekali. Dengan memahami capture list, parameter, dan penggunaannya dalam konteks yang berbeda, Anda dapat memanfaatkan lambda function untuk membuat kode yang lebih efisien dan mudah dibaca.

Leave a Reply

Your email address will not be published. Required fields are marked *