Po Timilehin Omolana
UdioCvrkutUdioE-mail

Saznajte kako lambda može učiniti vaš kod učinkovitijim i lakšim za održavanje.

Programski jezici neprestano se razvijaju, čak i oni poput C++ koji su se davno etablirali. Oni dodaju funkcije standardnim bibliotekama i čine druge promjene kako bi olakšali posao programera koji rade u dinamičnom polju.

Kao dio ažuriranja do kojih je dovela evolucija jezika, C++ je dodao podršku za lambda izraze u svom izdanju iz 2011.

Što je točno lambda izraz i kako ga možete koristiti u svoju korist kao C++ programer?

Što je lambda izraz?

Lambda izraz je također poznat kao lambda funkcija. To je ugrađeni izraz s mogućnošću prihvaćanja argumenata, izvođenja operacija i vraćanja vrijednosti, baš kao tipična funkcija.

Možete koristiti lambda unutar druge funkcije i dodijeliti je varijabli. Lamba funkcije praktičan su način definiranja anonimnog funkcijskog objekta u programu. Gotovo svaki jezik podržava lambda, iako se svaka implementacija razlikuje od ostalih.

instagram viewer

Koji su dijelovi C++ lambda izraza?

Lambda izrazi su jednostavni za korištenje u C++. Možete raščlaniti sintaksu lambda izraza u C++ na sljedeći način:

[klauza_hvatanja](parametri) opcije { tijelo_izraza; }

Na primjer:

int vrijednost = 13;
auto sumPlusVal = [val](int a, int b) promjenjivnoexcept ->int { povratak val + a + b; };
sumPlusVal(2, 5); // 20

Ovaj kod izjavljuje sumPlusVal varijabla auto jer lambda izraz može prihvatiti i vratiti bilo koji tip podataka. Ovo prepušta kompajleru da odredi tip tijekom kompilacije.

Iz gornjeg koda možete vidjeti da lambda izraz sadrži nekoliko dijelova koji određuju kako funkcionira. Evo kratkog pregleda svake od ovih komponenti.

  1. Klauzula o hvatanju: Ovo je prvi dio lambda izraza u kojem možete specificirati već postojeće varijable ili definirati nove za korištenje u tijelu izraza. Postoje različiti načini za određivanje snimanja, na primjer:
    auto addTwo = [foo](){ povratak foo + 2; }; // po vrijednosti
    auto addThree = [&bar](){ povratak bar + 3; }; // referencom
    auto addAllVal = [=](){ povratak foo + bar; }; // sve po vrijednosti
    auto addAllRef = [&](){ povratak foo + bar; }; // sve prema referencama

    // kreiraj varijablu u klauzuli za snimanje
    auto createVarInCapture = [fooBar = foo + bar](){ povratak FooBar * 5; };

    // nema snimanja - vraća pogrešku jer foo nije dostupan
    auto errorExpression = [](){ povratak foo + 2; };

  2. Parametri: Ovaj dio lambda izraza također nije obavezan. Sadrži parametre funkcije koje zahtijeva lambda. Ovo se ne razlikuje od uobičajenog načina na koji biste definirali parametre funkcije u C++.
  3. Mogućnosti: Također možete navesti opcije prilikom definiranja lambda izraza. Neke opcije koje biste mogli koristiti su: promjenjiv, izuzetak (npr noexcept u prvom uzorku koda), ->return_type (npr ->int), zahtijeva, atributiitd. The promjenjiv opcija se često koristi jer dopušta da se hvatanja mogu mijenjati unutar lambda. Kod u nastavku to pokazuje.
    int vrijednost = 10;

    // vraća grešku - vrijednost je konstanta unutar izraza
    automatsko smanjenje = [vrijednost](){ povratak --vrijednost; };
    auto inkrement = [vrijednost]() promjenjiv { povratak ++vrijednost; };
    povećanje(); // 11

    Iako se druge opcije rijetko koriste, više informacija o njima možete dobiti na cppreference.com stranica o lambdama.
  4. Izrazno tijelo: Ovo je tijelo lambda izraza koje izvršava i vraća vrijednost, slično kao što bi to učinila funkcija. Ako je potrebno, možete podijeliti tijelo lambda izraza u više od jedne linije. Međutim, najbolja je praksa da bude što kraći kako biste spriječili neorganiziran kod.

Koje su prednosti lambda izraza?

Postoje mnoge prednosti korištenja lambda funkcija u vašem kodu. Osim povećane brzine i učinkovitosti razvoja, glavne prednosti koje dobivate od lambda su sljedeće:

  • Lambda izrazi pomažu u održavanju čistoće koda. Jedan od najboljih načina da vaš kod bude jednostavan i uredan je korištenje lambda gdje je to moguće. To može biti od velike pomoći u održavanju čitljive strukture koda koja se može ponovno koristiti.
  • Možete proslijediti lambde drugim funkcijama kao parametre. The C++ standardne bibliotekestd:: sort() metoda koristi ovu prednost. Možete proslijediti lambda kao jedan od parametara ove metode da odredite kako bi funkcija trebala izvršiti sortiranje. Na primjer:
     std:: vektor<int> arr = {2, 5, 1, 3, 4};
    std:: sort (arr.begin(), arr.end(), [](int a, int b){ povratak a < b; });
    // arr = {1, 2, 3, 4, 5}
  • Lambde su za višekratnu upotrebu. Ponekad ćete možda htjeti napraviti blok koda koji se može ponovno koristiti u okviru funkcije u vašem programu bez definiranja nove funkcije. Lambda može biti od velike pomoći u takvim slučajevima. Razmotrite sljedeći primjer višekratnog lambda izraza:
    #uključi <iostream>
    korištenjem imenski prostorstd;

    intglavni(){
    // definirati višekratnu lambdu
    auto addUp = [](auto a, auto b, auto c) noexcept {
    cout <<"Sada zbrajanje... "<< a <<", "<< b <<" i "<< c << endl;
    povratak a + b + c ;
    };

    cout << zbrajanje (22, 33, 44) << endl;
    cout << addUp (string("Sretan "), niz("Rođenje"), niz("dan")) << endl;
    cout << addUp(pravi, lažno, pravi) << std:: endl; // izvršava se kao brojevi (1 i 0)
    }

    Ovaj program daje sljedeće rezultate: Ovaj primjer pokazuje kako je jednostavno definirati lambda tako da je možete koristiti s bilo kojom vrstom.

Korištenje Lambda u C++

Postoje mnoge druge prednosti koje nude lambda izrazi, a otkrit ćete ih kako struktura vašeg programa postaje sve složenija. Zapravo, C++ programeri ponekad nazivaju lambda izraze zatvaranjima jer su tako sjajan način za implementaciju zatvaranja u kodu.

Trebali biste razmotriti lambda izraze ako želite ugraditi moderne C++ koncepte u svoju bazu koda.

11 C++ isječaka koda za svakodnevne programerske probleme

Pročitajte dalje

UdioCvrkutUdioE-mail

Povezane teme

  • Programiranje
  • Programiranje
  • Vodiči kodiranja

O autoru

Timilehin Omolana (Objavljeno 5 članaka)

Timilehin je softverski inženjer i tehnički pisac koji voli istraživati ​​svijet serverskih tehnologija i distribuiranih sustava.

Više od Timilehina Omolane

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!

Kliknite ovdje da se pretplatite