Kõrval Timilehin Omolana
JagaSäutsJagaMeil

Siit saate teada, kuidas lambdad muudavad teie koodi tõhusamaks ja hõlpsamini hooldatavaks.

Programmeerimiskeeled arenevad pidevalt, isegi need, nagu C++, mis on end juba ammu sisse seadnud. Need lisavad standardsetele teekidele funktsioone ja teevad muid muudatusi, et hõlbustada dünaamilises valdkonnas töötavate programmeerijate tööd.

Osana keele arengust tingitud värskendustest lisas C++ oma 2011. aasta versioonis lambda-avaldiste toe.

Mis täpselt on lambda avaldis ja kuidas saate seda kasutada C++ programmeerijana?

Mis on lambda väljend?

Lambda avaldist tuntakse ka lambda funktsioonina. See on tekstisisene avaldis, mis võimaldab vastu võtta argumente, sooritada toiminguid ja tagastada väärtuse, nagu tüüpiline funktsioon.

Saate kasutada lambdat mõne teise funktsiooni sees ja määrata selle muutujale. Lamba funktsioonid on praktiline viis anonüümse funktsiooniobjekti määratlemiseks programmis. Peaaegu kõik keeled toetavad lambdasid, kuigi iga rakendus erineb teistest.

instagram viewer

Mis on C++ lambda-avaldise osad?

Lambda-avaldisi on C++-s lihtne kasutada. Lambda-avaldise süntaksi saate C++ keeles jagada järgmiselt:

[capture_clause](parameetrid) suvandid { avaldise_keha; }

Näiteks:

int val = 13;
auto sumPlusVal = [val](int a, int b) muutuvei välja arvatud ->int { tagasi val + a + b; };
sumPlusVal(2, 5); // 20

See kood deklareerib sumPlusVal muutuja auto, kuna lambda-avaldis võib aktsepteerida ja tagastada mis tahes andmetüübi. See jätab kompilaatori ülesandeks kompileerimise ajal tüübi kindlaks määrata.

Ülaltoodud koodist näete, et lambda-avaldis sisaldab mitut osa, mis määravad selle toimimise. Siin on kiire ülevaade kõigist nendest komponentidest.

  1. Püüdmisklausel: See on lambda-avaldise esimene osa, kus saate määrata olemasolevaid muutujaid või määrata uusi, mida avaldise kehas kasutada. Piltide määramiseks on erinevaid viise, näiteks:
    auto addTwo = [foo](){ tagasi foo + 2; }; // väärtuse järgi
    auto addThree = [&bar](){ tagasi baar + 3; }; // viitega
    auto addAllVal = [=](){ tagasi foo + baar; }; // kõik väärtuse järgi
    auto addAllRef = [&](){ tagasi foo + baar; }; // kõik viitega

    // loob püüdmisklauslis muutuja
    auto createVarInCapture = [fooBar = foo + bar](){ tagasi fooBar * 5; };

    // püüdmist pole – tagastab vea, kuna foo pole ligipääsetav
    auto errorExpression = [](){ tagasi foo + 2; };

  2. Parameetrid: See lambda-avaldise osa on samuti valikuline. See sisaldab lambda jaoks vajalikke funktsiooniparameetreid. See ei erine tavapärasest viisist, kuidas saate C++-s funktsioonide parameetreid määratleda.
  3. Valikud: Suvandeid saab määrata ka lambda-avaldise määratlemisel. Mõned võimalused, mida saate kasutada, on järgmised: muutuv, erand (nt ei välja arvatud esimeses näidiskoodis), ->tagasi_tüüp (nt -> int), vajab, atribuudid, jne. The muutuv suvandit kasutatakse sageli, kuna see võimaldab jäädvustusi lambda sees muuta. Allolev kood näitab seda.
    int väärtus = 10;

    // tagastab vea - väärtus on avaldise sees olev const
    automaatne vähendamine = [väärtus](){ tagasi --väärtus; };
    auto increment = [väärtus]() muutuv { tagasi ++väärtus; };
    increment(); // 11

    Kuigi teisi valikuid kasutatakse harva, saate nende kohta lisateavet saidilt cppreference.com leht lambdadel.
  4. Väljenduskeha: See on lambda-avaldise keha, mis käivitab ja tagastab väärtuse, sarnaselt funktsiooniga. Vajadusel saate lambda-avaldise põhiosa jagada rohkem kui ühele reale. Siiski on parim tava jätta see võimalikult lühidalt, et vältida koodi rikkumist.

Millised on lambda väljenduste eelised?

Lambda-funktsioonide kasutamisel koodis on palju eeliseid. Lisaks suuremale arenduskiirusele ja tõhususele on lambdade peamised eelised järgmised:

  • Lambda avaldised aitavad koodi puhtana hoida. Üks parimaid viise koodi lihtsaks ja puhtaks hoidmiseks on võimalusel lambdade kasutamine. See võib olla väga kasulik loetava ja korduvkasutatava koodistruktuuri säilitamisel.
  • Saate lambdasid parameetritena edasi anda teistele funktsioonidele. The C++ standardsed raamatukogudstd:: sort() meetod kasutab seda eelist. Selle meetodi ühe parameetrina saate edastada lambda, et määrata, kuidas funktsioon peaks sortimise läbi viima. Näiteks:
     std:: vektor<int> arr = {2, 5, 1, 3, 4};
    std:: sort (arr.begin(), arr.end(), [](int a, int b){ tagasi a // arr = {1, 2, 3, 4, 5}
  • Lambdad on korduvkasutatavad. Mõnikord võite soovida muuta koodiploki oma programmis oleva funktsiooni ulatuses uuesti kasutatavaks, ilma et peaksite uut funktsiooni määratlema. Lambdadest võib sellistel juhtudel palju abi olla. Vaatleme järgmist korduvkasutatava lambda-avaldise näidet:
    #kaasa <iostream>
    kasutades nimeruumstd;

    intpeamine(){
    // defineerige korduvkasutatav lambda
    auto addUp = [](automaatne a, automaatne b, automaatne c) noexcept {
    cout <<"Nüüd liidetakse... "<< a <<", "<< b <<" ja "<< c << endl;
    tagasi a+b+c;
    };

    cout << liitmine (22, 33, 44) << endl;
    cout << addUp (string("Õnnelik "), string("Sünd"), string("päeval")) << endl;
    cout << addUp(tõsi, vale, tõsi) << std:: endl; // käivitatakse numbritena (1 ja 0)
    }

    See programm annab järgmise tulemuse: See näide näitab, kui lihtne on lambda määratlemine, et saaksite seda kasutada mis tahes tüüpi puhul.

Lambdade kasutamine C++-s

Lambda-väljendid pakuvad palju muid eeliseid ja avastate need siis, kui teie programmi struktuur muutub keerukamaks. Tegelikult nimetavad C++ programmeerijad lambda-avaldisi mõnikord sulgemisteks, kuna need on suurepärane viis sulgemiste rakendamiseks koodis.

Kui soovite oma koodibaasi lisada kaasaegsed C++ kontseptsioonid, peaksite kaaluma lambda-avaldisi.

11 C++ koodilõiku igapäevaste programmeerimisprobleemide jaoks

Loe edasi

JagaSäutsJagaMeil

Seotud teemad

  • Programmeerimine
  • Programmeerimine
  • Kodeerimise õpetused

Autori kohta

Timilehin Omolana (5 artiklit avaldatud)

Timilehin on tarkvarainsener ja tehniline kirjanik, kellele meeldib avastada serveripoolsete tehnoloogiate ja hajutatud süsteemide maailma.

Veel Timilehin Omolanalt

Liituge meie uudiskirjaga

Liituge meie uudiskirjaga tehniliste näpunäidete, arvustuste, tasuta e-raamatute ja eksklusiivsete pakkumiste saamiseks!

Tellimiseks klõpsake siin