Av Timilehin Omolana
DelekvitringDeleE-post

Lær hvordan lambdaer kan gjøre koden din mer effektiv og enklere å vedlikeholde.

Programmeringsspråk utvikler seg kontinuerlig, selv de som C++ som etablerte seg for lenge siden. De legger til funksjoner til standardbiblioteker og gjør andre endringer for å lette jobben for programmerere som jobber i et dynamisk felt.

Som en del av oppdateringene forårsaket av språkets utvikling, la C++ til støtte for lambda-uttrykk i 2011-utgivelsen.

Hva er egentlig et lambda-uttrykk, og hvordan kan du bruke det til din fordel som C++-programmerer?

Hva er et Lambda-uttrykk?

Et lambda-uttrykk er også kjent som en lambda-funksjon. Det er et innebygd uttrykk med evnen til å akseptere argumenter, utføre operasjoner og returnere en verdi, akkurat som en typisk funksjon.

Du kan bruke en lambda inne i en annen funksjon og tilordne den til en variabel. Lamba-funksjoner er en praktisk måte å definere et anonymt funksjonsobjekt i et program. Nesten alle språk støtter lambdaer, selv om hver implementering varierer fra de andre.

instagram viewer

Hva er delene av et C++ Lambda-uttrykk?

Lambda-uttrykk er enkle å bruke i C++. Du kan bryte ned syntaksen til et lambda-uttrykk i C++ som følger:

[capture_clause](parametere) alternativer { expression_body; }

For eksempel:

int val = 13;
auto sumPlusVal = [val](int en, int b) foranderligikke unntatt ->int { komme tilbake val + a + b; };
sumPlusVal(2, 5); // 20

Denne koden erklærer sumPlusVal variabel auto fordi et lambda-uttrykk kan akseptere og returnere alle datatyper. Dette lar det være opp til kompilatoren å bestemme typen under kompilering.

Fra koden ovenfor kan du se at et lambda-uttrykk inneholder flere deler som spesifiserer hvordan det fungerer. Her er en rask oversikt over hver av disse komponentene.

  1. Capture-klausul: Dette er den første delen av et lambda-uttrykk der du kan spesifisere eksisterende variabler eller definere nye som skal brukes i uttrykkskroppen. Det er forskjellige måter å spesifisere fangst, for eksempel:
    auto addTwo = [foo](){ komme tilbake foo + 2; }; // etter verdi
    auto addThree = [&bar](){ komme tilbake bar + 3; }; // ved referanse
    auto addAllVal = [=](){ komme tilbake foo + bar; }; // alt etter verdi
    auto addAllRef = [&](){ komme tilbake foo + bar; }; // alt ved referanse

    // lag en variabel i capture-leddet
    auto createVarInCapture = [fooBar = foo + bar](){ komme tilbake fooBar * 5; };

    // no capture - returnerer feil fordi foo ikke er tilgjengelig
    auto errorExpression = [](){ komme tilbake foo + 2; };

  2. Parametere: Denne delen av lambda-uttrykket er også valgfritt. Den inneholder funksjonsparametrene som kreves av lambdaen. Dette er ikke forskjellig fra den vanlige måten du definerer funksjonsparametere i C++.
  3. Alternativer: Du kan også angi alternativer når du definerer et lambda-uttrykk. Noen alternativer du kan bruke er: foranderlig, unntak (f.eks ikke unntatt i den første prøvekoden), ->returtype (f.eks ->int), krever, egenskaper, etc. De foranderlig alternativet brukes ofte fordi det gjør at fangst kan endres inne i lambdaen. Koden nedenfor viser dette.
    int verdi = 10;

    // returnerer en feil - verdi er en konstant inne i uttrykket
    automatisk dekrement = [verdi](){ komme tilbake --verdi; };
    automatisk økning = [verdi]() mutable { komme tilbake ++verdi; };
    inkrement(); // 11

    Selv om de andre alternativene sjelden brukes, kan du få mer informasjon om dem på cppreference.com side på lambdaer.
  4. Uttrykkskropp: Dette er lambda-uttrykkets kropp som kjører og returnerer en verdi, omtrent som en funksjon ville gjort. Om nødvendig kan du dele kroppen til et lambda-uttrykk over mer enn én linje. Det er imidlertid best praksis å holde det så kort som mulig for å forhindre uorganisert kode.

Hva er fordelene med Lambda-uttrykk?

Det er mange fordeler med å bruke lambda-funksjoner i koden din. Bortsett fra økt utviklingshastighet og effektivitet, er de beste fordelene du får fra lambdaer som følger:

  • Lambda-uttrykk bidrar til å holde koden ren. En av de beste måtene å holde koden din enkel og ryddig er å bruke lambdaer der det er mulig. Dette kan være svært nyttig for å opprettholde en lesbar og gjenbrukbar kodestruktur.
  • Du kan sende lambdaer til andre funksjoner som parametere. De C++ standardbibliotekerstd:: sort() metoden gjør bruk av denne fordelen. Du kan sende en lambda som en av denne metodens parametere for å spesifisere hvordan funksjonen skal utføre sorteringen. For eksempel:
     std:: vektor<int> arr = {2, 5, 1, 3, 4};
    std:: sort (arr.begin(), arr.end(), [](int en, int b){ komme tilbake a < b; });
    // arr = {1, 2, 3, 4, 5}
  • Lambdaer er gjenbrukbare. Noen ganger vil du kanskje gjøre en kodeblokk gjenbrukbar innenfor rammen av en funksjon i programmet uten å måtte definere en ny funksjon. Lambda kan være til stor hjelp i slike tilfeller. Tenk på følgende eksempel på et gjenbrukbart lambda-uttrykk:
    #inkludere <iostream>
    ved hjelp av navneområdestd;

    inthoved-(){
    // definer en gjenbrukbar lambda
    auto addUp = [](auto a, auto b, auto c) noexcept {
    cout <<"Legger nå sammen... "<< en <<", "<< b <<" og "<< c << endl;
    komme tilbake a + b + c;
    };

    cout << addUp (22, 33, 44) << endl;
    cout << addUp (streng("Lykkelig "), streng("Fødsel"), streng("dag")) << endl;
    cout << addUp(ekte, falsk, ekte) << std:: endl; // utføres som tall (1 og 0)
    }

    Dette programmet gir følgende resultat: Dette eksemplet viser hvor enkelt det er å definere en lambda slik at du kan bruke den med hvilken som helst type.

Bruker lambdaer i C++

Det er mange andre fordeler som lambda-uttrykk tilbyr, og du vil oppdage dem etter hvert som strukturen til programmet ditt blir mer komplekst. Faktisk refererer C++-programmerere noen ganger til lambda-uttrykk som lukkinger fordi de er en så fin måte å implementere lukkinger i kode.

Du bør vurdere lambda-uttrykk hvis du vil inkorporere moderne C++-konsepter i kodebasen din.

11 C++-kodebiter for hverdagslige programmeringsproblemer

Les Neste

DelekvitringDeleE-post

Relaterte temaer

  • Programmering
  • Programmering
  • Kodingveiledninger

Om forfatteren

Timilehin Omolana (5 artikler publisert)

Timilehin er en programvareingeniør og teknisk skribent som elsker å utforske verden av serversideteknologier og distribuerte systemer.

Mer fra Timilehin Omolana

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!

Klikk her for å abonnere