Pelajari bagaimana lambdas dapat membuat kode Anda lebih efisien dan lebih mudah dirawat.
Bahasa pemrograman terus berkembang, bahkan bahasa seperti C++ yang sudah lama berdiri sendiri. Mereka menambahkan fungsi ke perpustakaan standar dan membuat perubahan lain untuk memudahkan pekerjaan programmer yang bekerja di bidang yang dinamis.
Sebagai bagian dari pembaruan yang dibawa oleh evolusi bahasa, C++ menambahkan dukungan untuk ekspresi lambda dalam rilis 2011-nya.
Apa sebenarnya ekspresi lambda, dan bagaimana Anda bisa menggunakannya untuk keuntungan Anda sebagai programmer C++?
Apa Itu Ekspresi Lambda?
Ekspresi lambda juga dikenal sebagai fungsi lambda. Ini adalah ekspresi sebaris dengan kemampuan untuk menerima argumen, melakukan operasi, dan mengembalikan nilai, seperti fungsi khas.
Anda dapat menggunakan lambda di dalam fungsi lain dan menetapkannya ke variabel. Fungsi Lamba adalah cara praktis untuk mendefinisikan objek fungsi anonim dalam suatu program. Hampir setiap bahasa mendukung lambda, meskipun setiap implementasi bervariasi dari yang lain.
Apa Bagian dari Ekspresi C++ Lambda?
Ekspresi Lambda mudah digunakan di C++. Anda dapat memecah sintaks ekspresi lambda di C++ sebagai berikut:
[capture_clause](parameter) opsi { ekspresi_tubuh; }
Sebagai contoh:
ke dalam val = 13;
mobil jumlahPlusVal = [val](ke dalam sebuah, ke dalam b) yg mungkin berubahtidakkecuali ->ke dalam { kembali val + a + b; };
jumlahPlusVal(2, 5); // 20
Kode ini menyatakan jumlahPlusVal variabel otomatis karena ekspresi lambda dapat menerima dan mengembalikan tipe data apa pun. Ini menyerahkannya kepada kompiler untuk menentukan tipe selama kompilasi.
Dari kode di atas, Anda dapat melihat bahwa ekspresi lambda berisi beberapa bagian yang menentukan cara operasinya. Berikut ini ikhtisar singkat dari masing-masing komponen ini.
-
Klausa tangkap: Ini adalah bagian pertama dari ekspresi lambda di mana Anda dapat menentukan variabel yang sudah ada sebelumnya atau menentukan variabel baru untuk digunakan di badan ekspresi. Ada berbagai cara untuk menentukan tangkapan, misalnya:
auto addTwo = [foo](){ kembali foo + 2; }; // menurut nilai
auto addThree = [&bar](){ kembali bar + 3; }; // dengan referensi
auto addAllVal = [=](){ kembali foo + batang; }; // semua berdasarkan nilai
auto addAllRef = [&](){ kembali foo + batang; }; // semua dengan referensi// buat variabel dalam klausa tangkap
auto createVarInCapture = [fooBar = foo + bar](){ kembali fooBar * 5; };// no capture - mengembalikan kesalahan karena foo tidak dapat diakses
auto errorExpression = [](){ kembali foo + 2; }; - Parameter: Bagian dari ekspresi lambda ini juga opsional. Ini berisi parameter fungsi yang dibutuhkan oleh lambda. Ini tidak berbeda dari cara biasa Anda mendefinisikan parameter fungsi di C++.
-
Pilihan: Anda juga dapat menentukan opsi saat mendefinisikan ekspresi lambda. Beberapa opsi yang dapat Anda gunakan adalah: yg mungkin berubah, pengecualian (misalnya tidakkecuali dalam kode sampel pertama), ->return_type (misalnya -> ke dalam), memerlukan, atribut, dll. Itu yg mungkin berubah option sering digunakan karena memungkinkan tangkapan dapat dimodifikasi di dalam lambda. Kode di bawah ini menunjukkan ini.
Meskipun opsi lain jarang digunakan, Anda dapat memperoleh informasi lebih lanjut tentangnya di cppreference.com halaman di lambdas.ke dalam nilai = 10;
// mengembalikan kesalahan - nilai adalah const di dalam ekspresi
pengurangan otomatis = [nilai](){ kembali --nilai; };
kenaikan otomatis = [nilai]() bisa berubah { kembali ++ nilai; };
kenaikan(); // 11 - Tubuh ekspresi: Ini adalah isi ekspresi lambda yang mengeksekusi dan mengembalikan nilai, seperti halnya fungsi. Jika perlu, Anda dapat membagi isi ekspresi lambda menjadi lebih dari satu baris. Namun, praktik terbaiknya adalah membuatnya sesingkat mungkin untuk mencegah kode yang tidak teratur.
Apa Manfaat Ekspresi Lambda?
Ada banyak keuntungan menggunakan fungsi lambda dalam kode Anda. Terlepas dari peningkatan kecepatan dan efisiensi pengembangan, manfaat utama yang Anda terima dari lambdas adalah sebagai berikut:
- Ekspresi Lambda membantu menjaga kode tetap bersih. Salah satu cara terbaik untuk menjaga kode Anda tetap sederhana dan rapi adalah dengan menggunakan lambda jika memungkinkan. Ini bisa sangat membantu dalam mempertahankan struktur kode yang dapat dibaca dan digunakan kembali.
-
Anda dapat meneruskan lambda ke fungsi lain sebagai parameter. Itu Pustaka standar C++std:: sort() metode memanfaatkan manfaat ini. Anda dapat melewatkan lambda sebagai salah satu parameter metode ini untuk menentukan bagaimana fungsi harus melakukan pengurutan. Contohnya:
std:: vektor<ke dalam> arr = {2, 5, 1, 3, 4};
std:: sort (arr.begin(), arr.end(), [](ke dalam sebuah, ke dalam b){ kembali a < b; });
// arr = {1, 2, 3, 4, 5} -
Lambda dapat digunakan kembali. Terkadang, Anda mungkin ingin membuat blok kode yang dapat digunakan kembali dalam lingkup fungsi dalam program Anda tanpa harus mendefinisikan fungsi baru. Lambdas bisa sangat membantu dalam kasus seperti itu. Pertimbangkan contoh berikut dari ekspresi lambda yang dapat digunakan kembali:
Program ini menghasilkan hasil sebagai berikut: Contoh ini menunjukkan betapa sederhananya mendefinisikan lambda sehingga Anda dapat menggunakannya dengan jenis apa pun.#termasuk <iostream>
menggunakan ruang namastd;ke dalamutama(){
// mendefinisikan lambda yang dapat digunakan kembali
auto addUp = [](auto a, auto b, auto c) noexcept {
cout <<"Sekarang bertambah... "<< sebuah <<", "<< b <<" dan "<< c << akhir;
kembali a + b + c ;
};cout << tambahan (22, 33, 44) << akhir;
cout << tambahan (string("Senang "), rangkaian("Kelahiran"), rangkaian("hari")) << akhir;
cout<BENAR, Salah, BENAR) << std:: endl; // dieksekusi sebagai angka (1 dan 0)
}
Menggunakan Lambdas di C++
Ada banyak manfaat lain yang ditawarkan ekspresi lambda, dan Anda akan menemukannya saat struktur program Anda tumbuh lebih kompleks. Faktanya, pemrogram C++ terkadang menyebut ekspresi lambda sebagai penutupan karena itu adalah cara yang bagus untuk mengimplementasikan penutupan dalam kode.
Anda harus mempertimbangkan ekspresi lambda jika Anda ingin memasukkan konsep C++ modern ke dalam basis kode Anda.