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:
capture_list
: Menentukan variabel di luar lambda yang akan digunakan di dalamnya.parameter_list
: Parameter yang diterima oleh lambda (mirip dengan parameter fungsi biasa).return_type
: Tipe nilai yang dikembalikan (opsional, biasanya ditentukan secara otomatis oleh compiler).- 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
- Ringkas dan Mudah Dibaca
Lambda function mengurangi boilerplate code dibandingkan dengan membuat fungsi secara eksplisit. - Integrasi STL yang Mulus
Lambda sangat cocok digunakan dalam algoritma STL untuk fungsi kustom. - 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