Autor: Timilehin Omolana
zdieľamTweetujtezdieľamEmail

Zistite, ako môže lambda zefektívniť váš kód a zjednodušiť jeho údržbu.

Programovacie jazyky sa neustále vyvíjajú, dokonca aj tie ako C++, ktoré sa etablovali už dávno. Pridávajú funkcie do štandardných knižníc a vykonávajú ďalšie zmeny, aby uľahčili prácu programátorom pracujúcim v dynamickej oblasti.

Ako súčasť aktualizácií, ktoré priniesol vývoj jazyka, C++ pridalo vo svojom vydaní z roku 2011 podporu pre výrazy lambda.

Čo presne je výraz lambda a ako ho môžete využiť vo svoj prospech ako programátor v C++?

Čo je výraz lambda?

Výraz lambda je známy aj ako funkcia lambda. Je to vložený výraz so schopnosťou prijímať argumenty, vykonávať operácie a vrátiť hodnotu, rovnako ako typická funkcia.

Lambda môžete použiť vo vnútri inej funkcie a priradiť ju k premennej. Lamba funkcie sú praktickým spôsobom definovania anonymného funkčného objektu v programe. Takmer každý jazyk podporuje lambdy, hoci každá implementácia sa líši od ostatných.

instagram viewer

Aké sú časti lambda výrazu C++?

Lambda výrazy sa v C++ ľahko používajú. Syntax výrazu lambda v C++ môžete rozdeliť takto:

[capture_klause](parametre) options { výraz_telo; }

Napríklad:

int val = 13;
auto sumPlusVal = [hodnota](int a, int b) premenlivénookrem ->int { vrátiť val + a + b; };
sumPlusVal(2, 5); // 20

Tento kód deklaruje sumPlusVal premenná auto, pretože výraz lambda môže prijať a vrátiť akýkoľvek typ údajov. Toto ponecháva na kompilátorovi, aby určil typ počas kompilácie.

Z vyššie uvedeného kódu môžete vidieť, že výraz lambda obsahuje niekoľko častí, ktoré špecifikujú, ako funguje. Tu je rýchly prehľad každej z týchto zložiek.

  1. Doložka o zachytení: Toto je prvá časť výrazu lambda, kde môžete zadať už existujúce premenné alebo definovať nové, ktoré sa majú použiť v tele výrazu. Existujú rôzne spôsoby, ako určiť zábery, napríklad:
    auto addTwo = [foo](){ vrátiť foo + 2; }; // podľa hodnoty
    auto addTri = [&bar](){ vrátiť pruh + 3; }; // odkazom
    auto addAllVal = [=](){ vrátiť foo + bar; }; // všetko podľa hodnoty
    auto addAllRef = [&](){ vrátiť foo + bar; }; // všetko podľa odkazu

    // vytvorte premennú v klauzule zachytávania
    auto createVarInCapture = [fooBar = foo + bar](){ vrátiť fooBar * 5; };

    // no capture - vráti chybu, pretože foo nie je prístupný
    auto errorExpression = [](){ vrátiť foo + 2; };

  2. Parametre: Táto časť výrazu lambda je tiež voliteľná. Obsahuje parametre funkcie požadované lambda. Toto sa nijako nelíši od bežného spôsobu, akým by ste definovali parametre funkcií v C++.
  3. Možnosti: Môžete tiež zadať možnosti pri definovaní výrazu lambda. Niektoré možnosti, ktoré môžete použiť, sú: premenlivé, výnimkou (napr nookrem v prvom vzorovom kóde), ->return_type (napr ->int), vyžaduje, atribúty, atď. The premenlivé možnosť sa často používa, pretože umožňuje, aby boli zachytenia modifikovateľné vo vnútri lambda. Dokazuje to kód uvedený nižšie.
    int hodnota = 10;

    // vracia chybu - hodnota je const vo vnútri výrazu
    automatické zníženie = [hodnota](){ vrátiť --hodnota; };
    automatický prírastok = [hodnota]() meniteľné { vrátiť ++hodnota; };
    increment(); // 11

    Aj keď sa ostatné možnosti používajú zriedka, viac informácií o nich môžete získať na stránke cppreference.com stránka o lambdách.
  4. Telo výrazu: Toto je telo výrazu lambda, ktoré vykoná a vráti hodnotu, podobne ako funkcia. V prípade potreby môžete telo výrazu lambda rozdeliť na viac ako jeden riadok. Osvedčeným postupom však je, aby bol čo najstručnejší, aby ste predišli neusporiadanému kódu.

Aké sú výhody lambda výrazov?

Používanie funkcií lambda vo vašom kóde má mnoho výhod. Okrem zvýšenej rýchlosti vývoja a efektívnosti sú hlavné výhody, ktoré získate od lambd, nasledovné:

  • Lambda výrazy pomáhajú udržiavať kód čistý. Jedným z najlepších spôsobov, ako udržať váš kód jednoduchý a prehľadný, je použitie lambd tam, kde je to možné. To môže byť veľmi užitočné pri udržiavaní čitateľnej a opakovane použiteľnej štruktúry kódu.
  • Lambdy môžete odovzdať iným funkciám ako parametre. The štandardné knižnice C++std:: zoradiť() metóda využíva túto výhodu. Môžete odovzdať lambda ako jeden z parametrov tejto metódy, aby ste určili, ako má funkcia vykonávať triedenie. Napríklad:
     std:: vektor<int> arr = {2, 5, 1, 3, 4};
    std:: zoradiť (arr.begin(), arr.end(), [](int a, int b){ vrátiť a < b; });
    // arr = {1, 2, 3, 4, 5}
  • Lambdy sú opakovane použiteľné. Niekedy možno budete chcieť urobiť blok kódu opätovne použiteľný v rámci funkcie vo vašom programe bez toho, aby ste museli definovať novú funkciu. Lambdy môžu byť v takýchto prípadoch veľmi nápomocné. Zvážte nasledujúci príklad opakovane použiteľného výrazu lambda:
    #include <iostream>
    použitím menný priestorstd;

    inthlavné(){
    // definovať opakovane použiteľnú lambdu
    auto addUp = [](auto a, auto b, auto c) noexcept {
    cout <<"Teraz sčítanie... "<< a <<", "<< b <<" a "<< c << endl;
    vrátiť a + b + c;
    };

    cout << addUp (22, 33, 44) << endl;
    cout << addUp (reťazec("Šťasný "), reťazec ("Narodenie"), reťazec ("deň")) << endl;
    cout << addUp(pravda, falošný, pravda) << std:: endl; // vykoná sa ako čísla (1 a 0)
    }

    Tento program vytvára nasledujúci výsledok: Tento príklad ukazuje, aké jednoduché je definovať lambdu, aby ste ju mohli použiť s akýmkoľvek typom.

Používanie lambd v C++

Existuje mnoho ďalších výhod, ktoré lambda výrazy ponúkajú, a objavíte ich, keď sa štruktúra vášho programu stane zložitejšou. V skutočnosti programátori C++ niekedy označujú výrazy lambda ako uzávery, pretože sú tak skvelým spôsobom, ako implementovať uzávery v kóde.

Mali by ste zvážiť výrazy lambda, ak chcete do svojej kódovej základne začleniť moderné koncepty C++.

11 úryvkov kódu C++ pre každodenné problémy s programovaním

Prečítajte si ďalej

zdieľamTweetujtezdieľamEmail

Súvisiace témy

  • Programovanie
  • Programovanie
  • Návody na kódovanie

O autorovi

Timilehin Omolana (5 publikovaných článkov)

Timilehin je softvérový inžinier a technický spisovateľ, ktorý miluje objavovanie sveta serverových technológií a distribuovaných systémov.

Viac od Timilehina Omolana

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné e-knihy a exkluzívne ponuky!

Ak sa chcete prihlásiť na odber, kliknite sem