Autorius Timilehinas Omolana
DalintisTviteryjeDalintisEl. paštas

Sužinokite, kaip lambdas gali padaryti jūsų kodą efektyvesnį ir lengviau prižiūrimą.

Programavimo kalbos nuolat tobulėja, net tokios, kaip C++, kurios įsitvirtino jau seniai. Jie papildo standartines bibliotekas ir atlieka kitus pakeitimus, kad palengvintų programuotojų, dirbančių dinamiškoje srityje, darbą.

Vykdydamas kalbos evoliuciją, C++ pridėjo lambda išraiškų palaikymą 2011 m. leidime.

Kas tiksliai yra lambda išraiška ir kaip ją panaudoti kaip C++ programuotoją?

Kas yra Lambda išraiška?

Lambda išraiška taip pat žinoma kaip lambda funkcija. Tai įterptinė išraiška su galimybe priimti argumentus, atlikti operacijas ir grąžinti reikšmę, kaip tipiška funkcija.

Galite naudoti lambda kitos funkcijos viduje ir priskirti ją kintamajam. Lamba funkcijos yra praktiškas būdas programoje apibrėžti anoniminį funkcijos objektą. Beveik visos kalbos palaiko lambdas, nors kiekvienas diegimas skiriasi nuo kitų.

instagram viewer

Kokios yra C++ Lambda išraiškos dalys?

Lambda išraiškas lengva naudoti C++. Galite suskaidyti lambda išraiškos sintaksę C++ taip:

[capture_clause](parameters) options { expression_body; }

Pavyzdžiui:

tarpt val = 13;
automatinis sumPlusVal = [val](tarpt a, tarpt b) kintamasneišskyrus ->tarpt { grąžinti val + a + b; };
sumPlusVal(2, 5); // 20

Šis kodas deklaruoja sumPlusVal kintamasis automatinis, nes lambda išraiška gali priimti ir grąžinti bet kokį duomenų tipą. Dėl to kompiliatorius nustato tipą kompiliavimo metu.

Iš aukščiau pateikto kodo matote, kad lambda išraišką sudaro kelios dalys, nurodančios, kaip ji veikia. Štai trumpa kiekvieno iš šių komponentų apžvalga.

  1. Užfiksavimo sąlyga: Tai pirmoji lambda išraiškos dalis, kurioje galite nurodyti jau esamus kintamuosius arba apibrėžti naujus, kuriuos naudosite išraiškos turinyje. Yra įvairių būdų, kaip nurodyti fiksavimus, pavyzdžiui:
    auto addTwo = [foo](){ grąžinti foo + 2; }; // pagal vertę
    auto addThree = [&bar](){ grąžinti baras + 3; }; // pagal nuorodą
    auto addAllVal = [=](){ grąžinti foo + baras; }; // visi pagal vertę
    auto addAllRef = [&](){ grąžinti foo + baras; }; // viskas pagal nuorodą

    // sukurti kintamąjį fiksavimo sąlygoje
    auto createVarInCapture = [fooBar = foo + bar](){ grąžinti fooBar * 5; };

    // nėra fiksavimo – pateikia klaidą, nes foo nepasiekiamas
    auto errorExpression = [](){ grąžinti foo + 2; };

  2. Parametrai: Ši lambda išraiškos dalis taip pat neprivaloma. Jame yra funkcijų parametrai, kurių reikia lambda. Tai niekuo nesiskiria nuo įprasto būdo, kaip apibrėžti funkcijų parametrus C++.
  3. Galimybės: Apibrėždami lambda išraišką taip pat galite nurodyti parinktis. Kai kurios parinktys, kurias galite naudoti: kintamas, išimtis (pvz neišskyrus pirmame pavyzdiniame kode), ->grįžimo_tipas (pvz -> tarpt), reikalauja, atributaiir kt. The kintamas parinktis dažnai naudojama, nes ji leidžia fiksavimus keisti lambda viduje. Žemiau pateiktas kodas tai parodo.
    tarpt vertė = 10;

    // grąžina klaidą – reikšmė yra const išraiškos viduje
    automatinis mažinimas = [vertė](){ grąžinti --vertė; };
    automatinis padidėjimas = [vertė]() kintamas { grąžinti ++vertė; };
    padidėjimas (); // 11

    Nors kitos parinktys naudojamos retai, daugiau informacijos apie jas galite rasti adresu cppreference.com puslapis apie lambdas.
  4. Išraiškos kūnas: Tai yra lambda išraiškos turinys, kuris vykdo ir grąžina reikšmę, panašiai kaip funkcija. Jei reikia, galite padalyti lambda išraiškos turinį daugiau nei vienoje eilutėje. Tačiau geriausia būtų jį pateikti kuo trumpiau, kad būtų išvengta netvarkingo kodo.

Kokie yra lambda išraiškų pranašumai?

Lambda funkcijų naudojimas kode turi daug privalumų. Be didesnio kūrimo greičio ir efektyvumo, didžiausi lambdas pranašumai yra šie:

  • Lambda išraiškos padeda išlaikyti kodą švarų. Vienas iš geriausių būdų, kaip padaryti kodą paprastą ir tvarkingą, yra naudoti lambdas, kur įmanoma. Tai gali būti labai naudinga palaikant skaitomą ir pakartotinai naudojamą kodo struktūrą.
  • Galite perduoti lambdas kitoms funkcijoms kaip parametrus. The C++ standartinė bibliotekastd:: sort() metodas išnaudoja šią naudą. Galite perduoti lambda kaip vieną iš šio metodo parametrų, kad nurodytumėte, kaip funkcija turi atlikti rūšiavimą. Pavyzdžiui:
     std:: vektorius<tarpt> arr = {2, 5, 1, 3, 4};
    std:: rūšiuoti (arr.begin(), arr.end(), [](tarpt a, tarpt b){ grąžinti a < b; });
    // arr = {1, 2, 3, 4, 5}
  • Lambdos yra daugkartinio naudojimo. Kartais gali tekti kodo bloką pakartotinai naudoti programos funkcijoje, neapibrėžiant naujos funkcijos. Tokiais atvejais lambdos gali labai padėti. Apsvarstykite šį daugkartinio naudojimo lambda išraiškos pavyzdį:
    #įtraukti <iostream>
    naudojant vardų erdvėstd;

    tarptpagrindinis(){
    // apibrėžkite daugkartinio naudojimo lambda
    auto addUp = [](automatinis a, automatinis b, automatinis c) noexcept {
    cout <<"Dabar pridedama... "<< a <<", "<< b <<" ir "<< c << endl;
    grąžinti a + b + c ;
    };

    cout << sudėjimas (22, 33, 44) << endl;
    cout << addUp (string("laimingas "), eilutė ("Gimdymas"), eilutė ("dieną")) << endl;
    cout << addUp(tiesa, klaidinga, tiesa) << std:: endl; // vykdomas kaip skaičiai (1 ir 0)
    }

    Ši programa duoda tokį rezultatą: Šis pavyzdys parodo, kaip paprasta apibrėžti lambda, kad galėtumėte ją naudoti su bet kokio tipo.

Lambdas naudojimas C++

Yra daug kitų pranašumų, kuriuos siūlo lambda išraiškos, ir jūs sužinosite, kaip jūsų programos struktūra tampa sudėtingesnė. Tiesą sakant, C ++ programuotojai kartais vadina lambda išraiškas kaip uždarymus, nes tai yra puikus būdas įgyvendinti uždarymą kode.

Turėtumėte apsvarstyti lambda išraiškas, jei norite įtraukti modernias C++ sąvokas į savo kodų bazę.

11 C++ kodo fragmentų kasdienėms programavimo problemoms spręsti

Skaitykite toliau

DalintisTviteryjeDalintisEl. paštas

Susijusios temos

  • Programavimas
  • Programavimas
  • Kodavimo pamokos

Apie autorių

Timilehinas Omolana (5 straipsniai paskelbti)

Timilehinas yra programinės įrangos inžinierius ir techninis rašytojas, mėgstantis tyrinėti serverio technologijų ir paskirstytų sistemų pasaulį.

Daugiau iš Timilehin Omolana

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. knygų ir išskirtinių pasiūlymų!

Spauskite čia norėdami užsiprenumeruoti