Ved Timilehin Omolana
DelTweetDelE-mail

Lær hvordan lambdaer kan gøre din kode mere effektiv og nemmere at vedligeholde.

Programmeringssprog udvikler sig konstant, selv dem som C++, der etablerede sig for længe siden. De tilføjer funktioner til standardbiblioteker og foretager andre ændringer for at lette arbejdet for programmører, der arbejder i et dynamisk felt.

Som en del af opdateringerne forårsaget af sprogets udvikling, tilføjede C++ understøttelse af lambda-udtryk i sin 2011-udgivelse.

Hvad er et lambda-udtryk helt præcist, og hvordan kan du bruge det til din fordel som C++-programmør?

Hvad er et Lambda-udtryk?

Et lambda-udtryk er også kendt som en lambda-funktion. Det er et inline udtryk med evnen til at acceptere argumenter, udføre operationer og returnere en værdi, ligesom en typisk funktion.

Du kan bruge en lambda i en anden funktion og tildele den til en variabel. Lamba-funktioner er en praktisk måde at definere et anonymt funktionsobjekt i et program. Næsten alle sprog understøtter lambdas, selvom hver implementering varierer fra de andre.

instagram viewer

Hvad er delene af et C++ Lambda-udtryk?

Lambda-udtryk er nemme at bruge i C++. Du kan nedbryde syntaksen for et lambda-udtryk i C++ som følger:

[capture_clause](parametre) muligheder { expression_body; }

For eksempel:

int val = 13;
auto sumPlusVal = [val](int en, int b) foranderlignej undtagen ->int { Vend tilbage val + a + b; };
sumPlusVal(2, 5); // 20

Denne kode erklærer sumPlusVal variabel auto, fordi et lambda-udtryk kan acceptere og returnere enhver datatype. Dette overlader det til compileren at bestemme typen under kompileringen.

Fra koden ovenfor kan du se, at et lambda-udtryk indeholder flere dele, der angiver, hvordan det fungerer. Her er et hurtigt overblik over hver af disse komponenter.

  1. Capture-klausul: Dette er den første del af et lambda-udtryk, hvor du kan angive allerede eksisterende variabler eller definere nye til brug i udtrykkets krop. Der er forskellige måder at angive optagelser på, for eksempel:
    auto addTwo = [foo](){ Vend tilbage foo + 2; }; // efter værdi
    auto addThree = [&bar](){ Vend tilbage bar + 3; }; // ved reference
    auto addAllVal = [=](){ Vend tilbage foo + bar; }; // alt efter værdi
    auto addAllRef = [&](){ Vend tilbage foo + bar; }; // alt ved reference

    // opret en variabel i capture-sætning
    auto createVarInCapture = [fooBar = foo + bar](){ Vend tilbage fooBar * 5; };

    // ingen capture - returnerer fejl, fordi foo ikke er tilgængelig
    auto errorExpression = [](){ Vend tilbage foo + 2; };

  2. Parametre: Denne del af lambda-udtrykket er også valgfri. Den indeholder de funktionsparametre, der kræves af lambda. Dette er ikke anderledes end den sædvanlige måde, du ville definere funktionsparametre i C++.
  3. Muligheder: Du kan også angive indstillinger, når du definerer et lambda-udtryk. Nogle muligheder du kan bruge er: foranderlig, undtagelse (for eksempel nej undtagen i den første prøvekode), ->returtype (for eksempel ->int), kræver, egenskaber, etc. Det foranderlig option bruges ofte, fordi den tillader, at optagelser kan ændres inde i lambdaen. Koden nedenfor viser dette.
    int værdi = 10;

    // returnerer en fejl - værdi er en const inde i udtrykket
    automatisk dekrement = [værdi](){ Vend tilbage --værdi; };
    automatisk stigning = [værdi]() kan ændres { Vend tilbage ++værdi; };
    stigning(); // 11

    Selvom de andre muligheder sjældent bruges, kan du få mere information om dem på cppreference.com side om lambdaer.
  4. Udtrykslegeme: Dette er lambda-udtrykkets krop, som udfører og returnerer en værdi, ligesom en funktion ville. Hvis det er nødvendigt, kan du dele brødteksten af ​​et lambda-udtryk over mere end én linje. Det er dog bedste praksis at holde det så kort som muligt for at forhindre uorganiseret kode.

Hvad er fordelene ved Lambda-udtryk?

Der er mange fordele ved at bruge lambda-funktioner i din kode. Bortset fra øget udviklingshastighed og effektivitet, er de største fordele, du modtager fra lambdaer, som følger:

  • Lambda-udtryk hjælper med at holde koden ren. En af de bedste måder at holde din kode enkel og pæn er ved at bruge lambdas, hvor det er muligt. Dette kan være meget nyttigt til at opretholde en læsbar og genbrugelig kodestruktur.
  • Du kan overføre lambdaer til andre funktioner som parametre. Det C++ standardbibliotekerstd:: sort() metode gør brug af denne fordel. Du kan sende en lambda som en af ​​denne metodes parametre for at specificere, hvordan funktionen skal udføre sorteringen. For eksempel:
     std:: vektor<int> arr = {2, 5, 1, 3, 4};
    std:: sort (arr.begin(), arr.end(), [](int en, int b){ Vend tilbage a < b; });
    // arr = {1, 2, 3, 4, 5}
  • Lambdaer kan genbruges. Nogle gange vil du måske gøre en kodeblok genanvendelig inden for rammerne af en funktion i dit program uden at skulle definere en ny funktion. Lambdas kan være meget nyttige i sådanne tilfælde. Overvej følgende eksempel på et genanvendeligt lambda-udtryk:
    #omfatte <iostream>
    ved brug af navneområdestd;

    intvigtigste(){
    // definere en genanvendelig lambda
    auto addUp = [](auto a, auto b, auto c) noexcept {
    cout <<"Tilføjer nu... "<< -en <<", "<< b <<" og "<< c << endl;
    Vend tilbage a + b + c;
    };

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

    Dette program giver følgende resultat: Dette eksempel viser, hvor nemt det er at definere en lambda, så du kan bruge den med enhver type.

Brug af lambdaer i C++

Der er mange andre fordele, som lambda-udtryk tilbyder, og du vil opdage dem, efterhånden som dit programs struktur bliver mere kompleks. Faktisk refererer C++-programmører nogle gange til lambda-udtryk som lukninger, fordi de er så fantastisk en måde at implementere lukninger i kode.

Du bør overveje lambda-udtryk, hvis du ønsker at inkorporere moderne C++-koncepter i din kodebase.

11 C++ kodestykker til hverdagslige programmeringsproblemer

Læs Næste

DelTweetDelE-mail

Relaterede emner

  • Programmering
  • Programmering
  • Kodningsvejledninger

Om forfatteren

Timilehin Omolana (5 artikler udgivet)

Timilehin er en softwareingeniør og teknisk forfatter, der elsker at udforske verden af ​​serversideteknologier og distribuerede systemer.

Mere fra Timilehin Omolana

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for tekniske tips, anmeldelser, gratis e-bøger og eksklusive tilbud!

Klik her for at abonnere