Uzziniet, kā lambdas var padarīt jūsu kodu efektīvāku un vieglāk uzturējamu.
Programmēšanas valodas nepārtraukti attīstās, pat tās, piemēram, C++, kas ir izveidojušās jau sen. Tie pievieno funkcijas standarta bibliotēkām un veic citas izmaiņas, lai atvieglotu programmētāju darbu, kas strādā dinamiskā jomā.
Kā daļu no atjauninājumiem, ko radīja valodas evolūcija, C++ savā 2011. gada laidienā pievienoja atbalstu lambda izteiksmēm.
Kas īsti ir lambda izteiksme, un kā jūs varat to izmantot savā labā kā C++ programmētājs?
Kas ir Lambda izteiksme?
Lambda izteiksme ir pazīstama arī kā lambda funkcija. Tā ir iekļauta izteiksme ar iespēju pieņemt argumentus, veikt darbības un atgriezt vērtību, tāpat kā tipiska funkcija.
Varat izmantot lambda citā funkcijā un piešķirt to mainīgajam. Lamba funkcijas ir praktisks veids, kā programmā definēt anonīmu funkciju objektu. Gandrīz visas valodas atbalsta lambdas, lai gan katra versija atšķiras no citām.
Kādas ir C++ Lambda izteiksmes daļas?
Lambda izteiksmes ir viegli lietojamas programmā C++. Lambda izteiksmes sintaksi programmā C++ var sadalīt šādi:
[capture_clause](parameters) opcijas { expression_body; }
Piemēram:
starpt val = 13;
auto sumPlusVal = [val](starpt a, starpt b) mainīgsnē izņemot ->starpt { atgriezties val + a + b; };
sumPlusVal(2, 5); // 20
Šis kods deklarē sumPlusVal mainīgais auto, jo lambda izteiksme var pieņemt un atgriezt jebkuru datu tipu. Tādējādi kompilatora ziņā ir noteikt veidu kompilācijas laikā.
No iepriekš minētā koda varat redzēt, ka lambda izteiksmē ir vairākas daļas, kas norāda, kā tā darbojas. Šeit ir īss pārskats par katru no šiem komponentiem.
-
Tveršanas klauzula: šī ir pirmā lambda izteiksmes daļa, kurā varat norādīt jau esošus mainīgos vai definēt jaunus, ko izmantot izteiksmes pamattekstā. Ir dažādi veidi, kā norādīt uztvērumus, piemēram:
auto addTwo = [foo](){ atgriezties foo + 2; }; // pēc vērtības
auto addThree = [&josla](){ atgriezties bārs + 3; }; // ar atsauci
auto addAllVal = [=](){ atgriezties foo + bārs; }; // viss pēc vērtības
auto addAllRef = [&](){ atgriezties foo + bārs; }; // viss pēc atsauces// izveidojiet mainīgo uztveršanas klauzulā
auto createVarInCapture = [fooBar = foo + bar](){ atgriezties fooBar * 5; };// nav uztveršanas — atgriež kļūdu, jo foo nav pieejams
auto errorExpression = [](){ atgriezties foo + 2; }; - Parametri: Šī lambda izteiksmes daļa arī nav obligāta. Tas satur funkciju parametrus, kas nepieciešami lambda. Tas neatšķiras no parastā veida, kā definējat funkciju parametrus programmā C++.
-
Iespējas: Varat arī norādīt opcijas, definējot lambda izteiksmi. Dažas iespējas, kuras varat izmantot, ir šādas: mainīgs, izņēmums (piem nē izņemot pirmajā parauga kodā), ->atgriešanas_veids (piem -> starp), prasa, atribūtiutt. The mainīgs opcija tiek bieži izmantota, jo tā ļauj tveršanu mainīt lambda iekšpusē. Tālāk redzamais kods to parāda.
Lai gan pārējās iespējas tiek izmantotas reti, plašāku informāciju par tām varat iegūt vietnē cppreference.com lapa uz lambdas.starpt vērtība = 10;
// atgriež kļūdu — vērtība ir const izteiksmē
automātiskā samazināšana = [vērtība](){ atgriezties --vērtība; };
auto increment = [vērtība]() mainīgs { atgriezties ++vērtība; };
pieaugums (); // 11 - Izteiksmes ķermenis: Šis ir lambda izteiksmes pamatteksts, kas izpilda un atgriež vērtību, līdzīgi kā to darītu funkcija. Ja nepieciešams, varat sadalīt lambda izteiksmes pamattekstu vairāk nekā vienā rindā. Tomēr paraugprakse ir rakstīt pēc iespējas īsu, lai novērstu nesakārtotu kodu.
Kādas ir Lambda izteiksmju priekšrocības?
Lambda funkciju izmantošanai kodā ir daudz priekšrocību. Papildus lielākam izstrādes ātrumam un efektivitātei, galvenās priekšrocības, ko iegūstat no lambdas, ir šādas:
- Lambda izteiksmes palīdz uzturēt kodu tīru. Viens no labākajiem veidiem, kā padarīt kodu vienkāršu un glītu, ir izmantot lambdas, kur iespējams. Tas var būt ļoti noderīgi, lai uzturētu lasāmu un atkārtoti lietojamu koda struktūru.
-
Jūs varat nodot lambdas citām funkcijām kā parametrus. The C++ standarta bibliotēkasstd:: šķirot() metode izmanto šo priekšrocību. Varat nodot lambda kā vienu no šīs metodes parametriem, lai norādītu, kā funkcijai jāveic kārtošana. Piemēram:
std:: vektors<starpt> arr = {2, 5, 1, 3, 4};
std:: kārtot (arr.begin(), arr.end(), [](starpt a, starpt b){ atgriezties a < b; });
// arr = {1, 2, 3, 4, 5} -
Lambdas ir atkārtoti lietojamas. Dažkārt, iespējams, vēlēsities koda bloku padarīt atkārtoti lietojamu programmas funkcijas ietvaros, nedefinējot jaunu funkciju. Šādos gadījumos lambdas var būt ļoti noderīgas. Apsveriet šādu atkārtoti lietojamas lambda izteiksmes piemēru:
Šī programma dod šādu rezultātu: Šis piemērs parāda, cik vienkārši ir definēt lambda, lai to varētu izmantot ar jebkura veida.#iekļauts <iostream>
izmantojot nosaukumvietastd;starptgalvenais(){
// definējiet atkārtoti lietojamu lambda
auto addUp = [](automātiskais a, automātiskais b, automātiskais c) noexcept {
cout <<"Tagad saskaita... "<< a <<", "<< b <<" un "<< c << endl;
atgriezties a+b+c;
};cout << saskaitīšana (22, 33, 44) << endl;
cout << addUp (string("Laimīgs "), virkne ("Dzimšana"), virkne ("diena")) << endl;
cout << addUp(taisnība, viltus, taisnība) << std:: endl; // izpilda kā skaitļus (1 un 0)
}
Lambdas izmantošana programmā C++
Ir daudzas citas priekšrocības, ko piedāvā lambda izteiksmes, un jūs tās atklāsit, kad jūsu programmas struktūra kļūst sarežģītāka. Faktiski C++ programmētāji dažreiz atsaucas uz lambda izteiksmēm kā aizvēršanu, jo tās ir lielisks veids, kā kodā ieviest slēgšanu.
Apsveriet lambda izteiksmes, ja vēlaties savā kodu bāzē iekļaut modernas C++ koncepcijas.