Avtor: Timilehin Omolana
DelitiTweetDelitiE-naslov

Naučite se, kako lahko lambda naredi vašo kodo učinkovitejšo in lažjo za vzdrževanje.

Programski jeziki se nenehno razvijajo, tudi tisti, kot je C++, ki so se uveljavili že davno. Standardnim knjižnicam dodajo funkcije in naredijo druge spremembe, da olajšajo delo programerjev, ki delajo na dinamičnem področju.

Kot del posodobitev, ki jih je prinesel razvoj jezika, je C++ v svoji izdaji iz leta 2011 dodal podporo za lambda izraze.

Kaj pravzaprav je lambda izraz in kako ga lahko uporabite v svojo korist kot programer C++?

Kaj je lambda izraz?

Lambda izraz je znan tudi kot lambda funkcija. Je vgrajeni izraz z možnostjo sprejemanja argumentov, izvajanja operacij in vrnitve vrednosti, tako kot tipična funkcija.

Lambdo lahko uporabite znotraj druge funkcije in jo dodelite spremenljivki. Funkcije Lamba so praktičen način definiranja anonimnega funkcijskega objekta v programu. Skoraj vsak jezik podpira lambde, čeprav se vsaka izvedba razlikuje od drugih.

instagram viewer

Kateri so deli lambda izraza C++?

Lambda izrazi so enostavni za uporabo v C++. Sintakso lambda izraza v C++ lahko razdelate na naslednji način:

[capture_clause](parametri) možnosti { izraz_body; }

Na primer:

int val = 13;
avto sumPlusVal = [val](int a, int b) spremenljivnoexcept ->int { vrnitev val + a + b; };
sumPlusVal(2, 5); // 20

Ta koda razglaša sumPlusVal spremenljivka auto, ker lahko lambda izraz sprejme in vrne katero koli podatkovno vrsto. To prepušča prevajalniku, da določi vrsto med prevajanjem.

Iz zgornje kode lahko vidite, da lambda izraz vsebuje več delov, ki določajo, kako deluje. Tukaj je kratek pregled vsake od teh komponent.

  1. Klavzula o zajemanju: To je prvi del lambda izraza, kjer lahko podate že obstoječe spremenljivke ali definirate nove za uporabo v telesu izraza. Zajeme lahko določite na različne načine, na primer:
    auto addTwo = [foo](){ vrnitev foo + 2; }; // po vrednosti
    auto addThree = [&bar](){ vrnitev bar + 3; }; // s sklicevanjem
    auto addAllVal = [=](){ vrnitev foo + bar; }; // vse po vrednosti
    auto addAllRef = [&](){ vrnitev foo + bar; }; // vse po referencah

    // ustvari spremenljivko v klavzuli o zajemanju
    auto createVarInCapture = [fooBar = foo + bar](){ vrnitev fooBar * 5; };

    // brez zajema - vrne napako, ker foo ni dostopen
    auto errorExpression = [](){ vrnitev foo + 2; };

  2. Parametri: Tudi ta del lambda izraza ni obvezen. Vsebuje parametre funkcije, ki jih zahteva lambda. To se ne razlikuje od običajnega načina definiranja funkcijskih parametrov v C++.
  3. Opcije: Možnosti lahko določite tudi pri definiranju lambda izraza. Nekatere možnosti, ki jih lahko uporabite, so: spremenljiv, izjema (npr noexcept v prvi vzorčni kodi), ->return_type (npr ->int), zahteva, lastnostiitd. The spremenljiv možnost se pogosto uporablja, ker omogoča spreminjanje zajemov znotraj lambde. Spodnja koda to prikazuje.
    int vrednost = 10;

    // vrne napako - vrednost je konstanta znotraj izraza
    samodejni dekrement = [vrednost](){ vrnitev --vrednost; };
    samodejni prirast = [vrednost]() spremenljiv { vrnitev ++vrednost; };
    povečaj(); // 11

    Čeprav se druge možnosti redko uporabljajo, lahko dobite več informacij o njih na cppreference.com stran o lambdah.
  4. Izrazno telo: To je telo lambda izraza, ki izvede in vrne vrednost, podobno kot bi to storila funkcija. Če je potrebno, lahko telo lambda izraza razdelite v več kot eno vrstico. Vendar je najboljša praksa, da ostane čim krajša, da preprečite neorganizirano kodo.

Kakšne so prednosti lambda izrazov?

Uporaba lambda funkcij v vaši kodi ima veliko prednosti. Poleg povečane razvojne hitrosti in učinkovitosti so glavne prednosti, ki jih prejmete od lambda, naslednje:

  • Lambda izrazi pomagajo ohranjati kodo čisto. Eden najboljših načinov, da ohranite svojo kodo preprosto in čisto, je uporaba lambda, kjer je to mogoče. To je lahko zelo koristno pri ohranjanju berljive in večkrat uporabne strukture kode.
  • Lambde lahko posredujete drugim funkcijam kot parametre. The standardne knjižnice C++std:: sort() metoda izkorišča to prednost. Kot enega od parametrov te metode lahko posredujete lambdo, da določite, kako naj funkcija izvede razvrščanje. Na primer:
     std:: vektor<int> arr = {2, 5, 1, 3, 4};
    std:: sort (arr.begin(), arr.end(), [](int a, int b){ vrnitev a < b; });
    // arr = {1, 2, 3, 4, 5}
  • Lambde so za večkratno uporabo. Včasih boste morda želeli narediti blok kode za ponovno uporabo v obsegu funkcije v vašem programu, ne da bi morali definirati novo funkcijo. Lambde so lahko v takih primerih zelo koristne. Razmislite o naslednjem primeru večkratno uporabnega lambda izraza:
    #vključi <iostream>
    uporabo imenski prostorstd;

    intglavni(){
    // definirajte lambdo za večkratno uporabo
    auto addUp = [](auto a, auto b, auto c) noexcept {
    cout <<"Zdaj pa seštevam... "<< a <<", "<< b <<" in "<< c << endl;
    vrnitev a + b + c ;
    };

    cout << addUp (22, 33, 44) << endl;
    cout << addUp (niz("srečno "), vrvica("Rojstvo"), vrvica("dan")) << endl;
    cout << addUp(prav, lažno, prav) << std:: endl; // izvaja se kot številke (1 in 0)
    }

    Ta program daje naslednje rezultate: Ta primer prikazuje, kako preprosto je definirati lambdo, tako da jo lahko uporabite s katero koli vrsto.

Uporaba Lambda v C++

Obstaja veliko drugih prednosti, ki jih ponujajo lambda izrazi, in odkrili jih boste, ko bo struktura vašega programa postala bolj zapletena. Pravzaprav programerji C++ včasih označujejo lambda izraze kot zaprtja, ker so tako odličen način za implementacijo zaprtij v kodo.

Razmislite o lambda izrazih, če želite v svojo kodno zbirko vključiti sodobne koncepte C++.

11 izrezkov kode C++ za vsakodnevne težave pri programiranju

Preberi Naprej

DelitiTweetDelitiE-naslov

Sorodne teme

  • Programiranje
  • Programiranje
  • Vadnice za kodiranje

O avtorju

Timilehin Omolana (Objavljenih 5 člankov)

Timilehin je programski inženir in tehnični pisec, ki rad raziskuje svet strežniških tehnologij in porazdeljenih sistemov.

Več od Timilehin Omolana

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e-knjige in ekskluzivne ponudbe!

Za naročanje kliknite tukaj