Által Timilehin Omolana
RészvényCsipogRészvényEmail

Ismerje meg, hogyan tehetik a lambdák hatékonyabbá és könnyebben karbantarthatóvá a kódot.

A programozási nyelvek folyamatosan fejlődnek, még azok is, mint például a C++, amelyek már régen beváltak. Funkciókkal egészítik ki a szabványos könyvtárakat, és egyéb változtatásokat hajtanak végre, hogy megkönnyítsék a dinamikus területen dolgozó programozók munkáját.

A nyelv fejlődése miatti frissítések részeként a C++ 2011-es kiadásában hozzáadta a lambda-kifejezések támogatását.

Mi is az a lambda kifejezés, és hogyan használhatod fel C++ programozóként?

Mi az a lambda kifejezés?

A lambda-kifejezést lambda-függvénynek is nevezik. Ez egy soron belüli kifejezés, amely képes argumentumokat elfogadni, műveleteket végrehajtani és értéket visszaadni, akárcsak tipikus funkció.

Használhat lambdát egy másik függvényen belül, és hozzárendelheti egy változóhoz. A Lamba függvények egy névtelen függvényobjektum egy programban való definiálásának praktikus módja. Szinte minden nyelv támogatja a lambdákat, bár mindegyik megvalósítás különbözik a többitől.

instagram viewer

Mik a részei a C++ lambda kifejezésnek?

A lambda kifejezések könnyen használhatók C++ nyelven. A lambda-kifejezés szintaxisát a következőképpen bonthatja fel C++ nyelven:

[capture_clause](parameters) options { expression_body; }

Például:

int val = 13;
auto sumPlusVal = [érték](int a, int b) változékonynem, kivéve ->int { Visszatérés val + a + b; };
sumPlusVal(2, 5); // 20

Ez a kód deklarálja a sumPlusVal változó auto, mert a lambda kifejezés bármilyen adattípust képes elfogadni és visszaadni. Ez a fordító feladata a fordítás során a típus meghatározása.

A fenti kódból láthatja, hogy egy lambda-kifejezés több olyan részt tartalmaz, amelyek meghatározzák a működését. Íme egy gyors áttekintés ezekről az összetevőkről.

  1. Capture záradék: Ez a lambda kifejezés első része, ahol megadhat már meglévő változókat, vagy meghatározhat újakat a kifejezés törzsében. A rögzítések megadásának különböző módjai vannak, például:
    auto addTwo = [foo](){ Visszatérés foo + 2; }; // érték szerint
    auto addThree = [&sáv](){ Visszatérés bár + 3; }; // referencia alapján
    auto addAllVal = [=](){ Visszatérés foo + bár; }; // mind érték szerint
    auto addAllRef = [&](){ Visszatérés foo + bár; }; // mindez hivatkozással

    // hozzon létre egy változót a rögzítési záradékban
    auto createVarInCapture = [fooBar = foo + bar](){ Visszatérés fooBar * 5; };

    // nincs rögzítés - hibát ad vissza, mert a foo nem érhető el
    auto errorExpression = [](){ Visszatérés foo + 2; };

  2. Paraméterek: A lambda kifejezésnek ez a része szintén nem kötelező. Tartalmazza a lambda által igényelt funkcióparamétereket. Ez semmiben sem különbözik a függvényparaméterek C++-ban való szokásos meghatározásától.
  3. Lehetőségek: A lambda-kifejezés definiálásakor is megadhat beállításokat. Néhány lehetőség, amelyet használhat: változékony, kivétel (például nem, kivéve az első mintakódban), ->visszatérési_típus (például ->int), igényel, attribútumokstb. Az változékony opciót gyakran használják, mert lehetővé teszi a rögzítések módosítását a lambdán belül. Az alábbi kód ezt mutatja be.
    int érték = 10;

    // hibát ad vissza - az érték egy const a kifejezésben
    automatikus csökkentés = [érték](){ Visszatérés --érték; };
    auto increment = [érték]() mutable { Visszatérés ++érték; };
    növekedés(); // 11

    Bár a többi lehetőséget ritkán használják, további információkat kaphat róluk a cppreference.com oldal a lambdákon.
  4. Kifejezési test: Ez a lambda kifejezés törzse, amely végrehajt és visszaad egy értéket, hasonlóan egy függvényhez. Ha szükséges, a lambda-kifejezés törzsét egynél több sorra is feloszthatja. Mindazonáltal a legjobb gyakorlat, ha a lehető legrövidebbre írja, hogy elkerülje a rendszerezetlen kódot.

Milyen előnyei vannak a lambda-kifejezéseknek?

Számos előnye van a lambda függvények kódjában való használatának. A megnövekedett fejlesztési sebesség és hatékonyság mellett a lambdák által nyújtott legfontosabb előnyök a következők:

  • A lambda-kifejezések segítenek tisztán tartani a kódot. A kód egyszerű és rendezett megőrzésének egyik legjobb módja a lambda használata, ahol lehetséges. Ez nagyon hasznos lehet az olvasható és újrafelhasználható kódstruktúra fenntartásában.
  • A lambdákat paraméterként átadhatja más függvényeknek. Az C++ szabványos könyvtárakstd:: sort() módszer kihasználja ezt az előnyt. Ennek a metódusnak az egyik paramétereként átadhat egy lambdát annak meghatározásához, hogy a függvény hogyan hajtsa végre a rendezést. Például:
     std:: vektor<int> arr = {2, 5, 1, 3, 4};
    std:: sort (arr.begin(), arr.end(), [](int a, int b){ Visszatérés a < b; });
    // arr = {1, 2, 3, 4, 5}
  • A lambdák újrafelhasználhatók. Néha előfordulhat, hogy egy kódblokkot újra felhasználhatóvá kell tenni egy függvény hatókörében a programban anélkül, hogy új függvényt kellene meghatározni. A lambdák nagyon hasznosak lehetnek ilyen esetekben. Tekintsük a következő példát egy újrafelhasználható lambda kifejezésre:
    #beleértve <iostream>
    segítségével névtérstd;

    intfő-(){
    // újrafelhasználható lambda meghatározása
    auto addUp = [](auto a, auto b, auto c) noexcept {
    cout <<"Most összeadjuk... "<< a <<", "<< b <<" és "<< c << endl;
    Visszatérés a + b + c;
    };

    cout << összeadás (22, 33, 44) << endl;
    cout << addUp (string("Boldog "), húr("Születés"), húr("nap")) << endl;
    cout << addUp(igaz, hamis, igaz) << std:: endl; // számként (1 és 0) hajtódik végre
    }

    Ez a program a következő eredményt produkálja: Ez a példa bemutatja, milyen egyszerű a lambda meghatározása, így bármilyen típussal használható.

Lambda használata C++ nyelven

A lambda-kifejezések számos egyéb előnyt is kínálnak, amelyeket a program szerkezetének bonyolultabbá válásával fedezhet fel. Valójában a C++ programozók a lambda-kifejezéseket néha lezárásoknak nevezik, mert nagyszerű módja a lezárások kódbeli megvalósításának.

Fontolja meg a lambda kifejezéseket, ha modern C++ fogalmakat szeretne beépíteni a kódbázisába.

11 C++ kódrészlet a mindennapi programozási problémákhoz

Olvassa el a következőt

RészvényCsipogRészvényEmail

Kapcsolódó témák

  • Programozás
  • Programozás
  • Kódolási oktatóanyagok

A szerzőről

Timilehin Omolana (5 cikk megjelent)

Timilehin szoftvermérnök és műszaki író, aki szereti felfedezni a szerveroldali technológiák és az elosztott rendszerek világát.

Továbbiak Timilehin Omolanától

Iratkozzon fel hírlevelünkre

Csatlakozzon hírlevelünkhöz műszaki tippekért, ismertetőkért, ingyenes e-könyvekért és exkluzív ajánlatokért!

Kattintson ide az előfizetéshez