De Timilehin Omolana
AcțiuneTweetAcțiuneE-mail

Aflați cum lambdas vă poate face codul mai eficient și mai ușor de întreținut.

Limbajele de programare evoluează continuu, chiar și cele precum C++ care s-au stabilit cu mult timp în urmă. Ele adaugă funcții bibliotecilor standard și fac alte modificări pentru a ușura munca programatorilor care lucrează într-un domeniu dinamic.

Ca parte a actualizărilor aduse de evoluția limbajului, C++ a adăugat suport pentru expresiile lambda în versiunea sa din 2011.

Ce este exact o expresie lambda și cum o poți folosi în avantajul tău ca programator C++?

Ce este o expresie Lambda?

O expresie lambda este cunoscută și ca funcție lambda. Este o expresie inline cu capacitatea de a accepta argumente, de a efectua operații și de a returna o valoare, la fel ca o funcție tipică.

Puteți utiliza o lambda în interiorul unei alte funcții și o puteți atribui unei variabile. Funcțiile Lamba sunt o modalitate practică de definire a unui obiect funcție anonimă într-un program. Aproape fiecare limbă acceptă lambda, deși fiecare implementare diferă de celelalte.

instagram viewer

Care sunt părțile unei expresii C++ Lambda?

Expresiile Lambda sunt ușor de utilizat în C++. Puteți descompune sintaxa unei expresii lambda în C++ după cum urmează:

[capture_clause](parametri) opțiuni { expression_body; }

De exemplu:

int val = 13;
auto sumPlusVal = [val](int A, int b) mutabilnuexcept ->int { întoarcere val + a + b; };
sumPlusVal(2, 5); // 20

Acest cod declară sumPlusVal variabilă auto deoarece o expresie lambda poate accepta și returna orice tip de date. Aceasta lasă la latitudinea compilatorului să determine tipul în timpul compilării.

Din codul de mai sus, puteți vedea că o expresie lambda conține mai multe părți care specifică modul în care funcționează. Iată o prezentare rapidă a fiecăreia dintre aceste componente.

  1. Clauza de captare: Aceasta este prima parte a unei expresii lambda în care puteți specifica variabile preexistente sau puteți defini altele noi de utilizat în corpul expresiei. Există diferite moduri de a specifica capturile, de exemplu:
    auto addTwo = [foo](){ întoarcere foo + 2; }; // după valoare
    auto addThree = [&bar](){ întoarcere bara + 3; }; // de referință
    auto addAllVal = [=](){ întoarcere foo + bar; }; // toate după valoare
    auto addAllRef = [&](){ întoarcere foo + bar; }; // toate prin referință

    // creează o variabilă în clauza de capturare
    auto createVarInCapture = [fooBar = foo + bar](){ întoarcere fooBar * 5; };

    // no capture - returnează eroare deoarece foo nu este accesibil
    auto errorExpression = [](){ întoarcere foo + 2; };

  2. Parametri: Această parte a expresiei lambda este, de asemenea, opțională. Conține parametrii funcției solicitați de lambda. Acest lucru nu este diferit de modul obișnuit în care ați defini parametrii funcției în C++.
  3. Opțiuni: De asemenea, puteți specifica opțiuni atunci când definiți o expresie lambda. Câteva opțiuni pe care le puteți utiliza sunt: mutabil, excepție (de exemplu nuexcept în primul cod exemplu), ->retur_type (de exemplu ->int), cere, atribute, etc. The mutabil opțiunea este adesea folosită deoarece permite ca capturile să fie modificabile în interiorul lambda. Codul de mai jos demonstrează acest lucru.
    int valoare = 10;

    // returnează o eroare - valoarea este o const în interiorul expresiei
    decrementare automată = [valoare](){ întoarcere --valoare; };
    increment automat = [valoare]() mutabil { întoarcere ++valoare; };
    creştere(); // 11

    Deși celelalte opțiuni sunt rareori utilizate, puteți obține mai multe informații despre ele pe site-ul cppreference.com pagina despre lambda.
  4. Corpul expresiei: Acesta este corpul expresiei lambda care execută și returnează o valoare, la fel ca o funcție. Dacă este necesar, puteți împărți corpul unei expresii lambda pe mai multe linii. Cu toate acestea, este cea mai bună practică să fie cât mai scurtă posibil pentru a preveni codul dezorganizat.

Care sunt beneficiile expresiilor Lambda?

Există multe avantaje în utilizarea funcțiilor lambda în codul dvs. Pe lângă viteza și eficiența crescută de dezvoltare, cele mai importante beneficii pe care le primiți de la lambda sunt următoarele:

  • Expresiile Lambda ajută la păstrarea curată a codului. Una dintre cele mai bune modalități de a vă păstra codul simplu și ordonat este să utilizați lambda acolo unde este posibil. Acest lucru poate fi foarte util în menținerea unei structuri de cod lizibile și reutilizabile.
  • Puteți trece lambda altor funcții ca parametri. The Bibliotecile standard C++std:: sort() metoda folosește acest beneficiu. Puteți trece un lambda ca unul dintre parametrii acestei metode pentru a specifica modul în care funcția ar trebui să efectueze sortarea. De exemplu:
     std:: vector<int> arr = {2, 5, 1, 3, 4};
    std:: sort (arr.begin(), arr.end(), [](int A, int b){ întoarcere a // arr = {1, 2, 3, 4, 5}
  • Lambda sunt reutilizabile. Uneori, poate doriți să faceți un bloc de cod reutilizabil în domeniul unei funcții din programul dvs. fără a fi nevoie să definiți o nouă funcție. Lambda poate fi de mare ajutor în astfel de cazuri. Luați în considerare următorul exemplu de expresie lambda reutilizabilă:
    #include <iostream>
    folosind spatiu de numestd;

    intprincipal(){
    // definiți o lambda reutilizabilă
    auto addUp = [](auto a, auto b, auto c) noexcept {
    cout <<"Acum însumând... "<< A <<", "<< b <<" și "<< c << endl;
    întoarcere a + b + c ;
    };

    cout << adunați (22, 33, 44) << endl;
    cout << adună (șir("Fericit "), șir("Naștere"), șir("zi")) << endl;
    cout << addUp(Adevărat, fals, Adevărat) << std:: endl; // se execută ca numere (1 și 0)
    }

    Acest program produce următorul rezultat: Acest exemplu demonstrează cât de simplu este să definiți un lambda, astfel încât să îl puteți utiliza cu orice tip.

Utilizarea Lambdas în C++

Există multe alte beneficii pe care expresiile lambda le oferă și le veți descoperi pe măsură ce structura programului dvs. devine mai complexă. De fapt, programatorii C++ se referă uneori la expresiile lambda ca închideri, deoarece sunt o modalitate atât de excelentă de a implementa închideri în cod.

Ar trebui să luați în considerare expresiile lambda dacă doriți să încorporați concepte moderne C++ în baza de cod.

11 fragmente de cod C++ pentru probleme de programare de zi cu zi

Citiți în continuare

AcțiuneTweetAcțiuneE-mail

Subiecte asemănătoare

  • Programare
  • Programare
  • Tutoriale de codare

Despre autor

Timilehin Omolana (5 articole publicate)

Timilehin este un inginer software și un scriitor tehnic căruia îi place să exploreze lumea tehnologiilor de pe partea de server și a sistemelor distribuite.

Mai multe de la Timilehin Omolana

Aboneaza-te la newsletter-ul nostru

Alăturați-vă buletinului nostru informativ pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!

Click aici pentru a te abona