Podle Timilehin Omolana
PodíltweetPodílE-mailem

Zjistěte, jak může lambda zefektivnit váš kód a snáze jej udržovat.

Programovací jazyky se neustále vyvíjejí, dokonce i ty jako C++, které se prosadily již dávno. Přidávají funkce do standardních knihoven a provádějí další změny pro usnadnění práce programátorů pracujících v dynamické oblasti.

Jako součást aktualizací, které přinesl vývoj jazyka, přidalo C++ ve svém vydání z roku 2011 podporu pro výrazy lambda.

Co přesně je výraz lambda a jak jej můžete využít ve svůj prospěch jako programátor v C++?

Co je výraz lambda?

Výraz lambda je také známý jako funkce lambda. Je to inline výraz se schopností přijímat argumenty, provádět operace a vracet hodnotu, stejně jako typická funkce.

Lambda můžete použít uvnitř jiné funkce a přiřadit ji k proměnné. Lamba funkce jsou praktický způsob, jak definovat anonymní funkční objekt v programu. Téměř každý jazyk podporuje lambdy, i když každá implementace se liší od ostatních.

Jaké jsou části lambda výrazu C++?

Lambda výrazy se v C++ snadno používají. Syntaxi výrazu lambda v C++ můžete rozdělit takto:

[klauzule_zachycení](parametry) options { tělo_výrazu; }

Například:

int val = 13;
auto sumPlusVal = [hodnota](int A, int b) proměnlivýno kromě ->int { vrátit se val + a + b; };
sumPlusVal(2, 5); // 20

Tento kód deklaruje sumPlusVal proměnná auto, protože výraz lambda může přijmout a vrátit jakýkoli datový typ. To ponechává na kompilátoru, aby určil typ během kompilace.

Z výše uvedeného kódu můžete vidět, že výraz lambda obsahuje několik částí, které určují, jak funguje. Zde je rychlý přehled každé z těchto součástí.

  1. Zachycovací klauzule: Toto je první část výrazu lambda, kde můžete specifikovat již existující proměnné nebo definovat nové pro použití v těle výrazu. Existují různé způsoby, jak určit zachycení, například:
    auto addDwo = [foo](){ vrátit se foo + 2; }; // podle hodnoty
    auto addThree = [&bar](){ vrátit se pruh + 3; }; // Odkazem
    auto addAllVal = [=](){ vrátit se foo + bar; }; // vše podle hodnoty
    auto addAllRef = [&](){ vrátit se foo + bar; }; // vše podle odkazu

    // vytvoří proměnnou v klauzuli capture
    auto createVarInCapture = [fooBar = foo + bar](){ vrátit se fooBar * 5; };

    // no capture - vrátí chybu, protože foo není přístupný
    auto errorExpression = [](){ vrátit se foo + 2; };

  2. Parametry: Tato část výrazu lambda je také volitelná. Obsahuje parametry funkce požadované lambda. To se nijak neliší od obvyklého způsobu, jakým byste definovali parametry funkcí v C++.
  3. Možnosti: Můžete také zadat volby při definování výrazu lambda. Některé možnosti, které můžete použít, jsou: proměnlivý, výjimka (např no kromě v prvním ukázkovém kódu), ->return_type (např ->int), vyžaduje, atributy, atd. The proměnlivý Tato možnost se často používá, protože umožňuje modifikovat zachycení uvnitř lambda. Níže uvedený kód to ukazuje.
    int hodnota = 10;

    // vrátí chybu - hodnota je const uvnitř výrazu
    automatické snížení = [hodnota](){ vrátit se --hodnota; };
    automatický přírůstek = [hodnota]() měnitelné { vrátit se ++hodnota; };
    přírůstek(); // 11

    Přestože se ostatní možnosti používají zřídka, můžete o nich získat více informací na cppreference.com stránka o lambdach.
  4. Tělo výrazu: Toto je tělo výrazu lambda, které vykonává a vrací hodnotu, podobně jako by to dělala funkce. V případě potřeby můžete tělo výrazu lambda rozdělit na více než jeden řádek. Je však osvědčeným postupem, aby byl co nejstručnější, abyste předešli neuspořádanému kódu.

Jaké jsou výhody lambda výrazů?

Používání funkcí lambda ve vašem kódu má mnoho výhod. Kromě zvýšené rychlosti vývoje a efektivity jsou hlavní výhody, které získáte od lambd, následující:

  • Lambda výrazy pomáhají udržovat kód čistý. Jedním z nejlepších způsobů, jak udržet váš kód jednoduchý a úhledný, je použití lambdas, kde je to možné. To může být velmi užitečné při udržování čitelné a opakovaně použitelné struktury kódu.
  • Lambdy můžete předávat dalším funkcím jako parametry. The standardní knihovny C++std:: sort() metoda využívá této výhody. Jako jeden z parametrů této metody můžete předat lambda, abyste určili, jak má funkce provádět řazení. Například:
     std:: vektor<int> arr = {2, 5, 1, 3, 4};
    std:: sort (arr.begin(), arr.end(), [](int A, int b){ vrátit se a < b; });
    // arr = {1, 2, 3, 4, 5}
  • Lambdy jsou opakovaně použitelné. Někdy můžete chtít, aby byl blok kódu znovu použitelný v rozsahu funkce ve vašem programu, aniž byste museli definovat novou funkci. Lambdy mohou být v takových případech velmi užitečné. Zvažte následující příklad opakovaně použitelného výrazu lambda:
    #zahrnout <iostream>
    použitím jmenný prostorstd;

    inthlavní(){
    // definovat opakovaně použitelnou lambdu
    auto addUp = [](auto a, auto b, auto c) noexcept {
    cout <<"Nyní sečteno... "<< A <<", "<< b <<" a "<< C << endl;
    vrátit se a + b + c;
    };

    cout << addUp (22, 33, 44) << endl;
    cout << addUp (řetězec("Šťastný "), tětiva("Narození"), tětiva("den")) << endl;
    cout << addUp(skutečný, Nepravdivé, skutečný) << std:: endl; // se provede jako čísla (1 a 0)
    }

    Tento program vytváří následující výsledek: Tento příklad ukazuje, jak jednoduché je definovat lambdu, abyste ji mohli použít s jakýmkoli typem.

Použití lambd v C++

Existuje mnoho dalších výhod, které lambda výrazy nabízejí, a objevíte je, až bude struktura vašeho programu složitější. Ve skutečnosti programátoři C++ někdy označují výrazy lambda jako uzávěry, protože jsou tak skvělým způsobem, jak implementovat uzávěry v kódu.

Pokud chcete do své kódové základny začlenit moderní koncepty C++, měli byste zvážit výrazy lambda.

11 úryvků kódu C++ pro každodenní problémy s programováním

Přečtěte si další

PodíltweetPodílE-mailem

Související témata

  • Programování
  • Programování
  • Kurzy kódování

O autorovi

Timilehin Omolana (Publikováno 5 článků)

Timilehin je softwarový inženýr a technický spisovatel, který miluje objevování světa serverových technologií a distribuovaných systémů.

Více od Timilehina Omolana

Přihlaste se k odběru našeho newsletteru

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné e-knihy a exkluzivní nabídky!

Chcete-li se přihlásit k odběru, klikněte sem