Door Timilehin Omolana
DeelTweetenDeelE-mail

Ontdek hoe lambdas uw code efficiënter en gemakkelijker te onderhouden kan maken.

Programmeertalen evolueren voortdurend, zelfs talen zoals C++ die zich lang geleden hebben gevestigd. Ze voegen functies toe aan standaardbibliotheken en brengen andere wijzigingen aan om het werk van programmeurs die in een dynamisch veld werken te vergemakkelijken.

Als onderdeel van de updates veroorzaakt door de evolutie van de taal, heeft C++ ondersteuning toegevoegd voor lambda-expressies in de release van 2011.

Wat is een lambda-expressie precies en hoe kun je deze als C++-programmeur in je voordeel gebruiken?

Wat is een Lambda-expressie?

Een lambda-expressie wordt ook wel een lambda-functie genoemd. Het is een inline-expressie met de mogelijkheid om argumenten te accepteren, bewerkingen uit te voeren en een waarde terug te geven, net als een typische functie.

U kunt een lambda in een andere functie gebruiken en deze aan een variabele toewijzen. Lamba-functies zijn een praktische manier om een ​​anoniem functie-object in een programma te definiëren. Bijna elke taal ondersteunt lambdas, hoewel elke implementatie verschilt van de andere.

instagram viewer

Wat zijn de onderdelen van een C++ Lambda-expressie?

Lambda-expressies zijn gemakkelijk te gebruiken in C++. U kunt de syntaxis van een lambda-expressie in C++ als volgt opsplitsen:

[capture_clause](parameters) opties { expression_body; }

Bijvoorbeeld:

int val = 13;
auto sumPlusVal = [waarde](int a, int b) veranderlijknee behalve ->int { opbrengst val + a + b; };
sumPlusVal(2, 5); // 20

Deze code verklaart de sumPlusVal variabele auto omdat een lambda-expressie elk gegevenstype kan accepteren en retourneren. Dit laat het aan de compiler over om het type tijdens het compileren te bepalen.

Uit de bovenstaande code kun je zien dat een lambda-expressie verschillende delen bevat die aangeven hoe deze werkt. Hier volgt een kort overzicht van elk van deze componenten.

  1. Capture clausule: Dit is het eerste deel van een lambda-expressie waarin u reeds bestaande variabelen kunt specificeren of nieuwe kunt definiëren om in de hoofdtekst van de expressie te gebruiken. Er zijn verschillende manieren om opnamen te specificeren, bijvoorbeeld:
    automatisch toevoegenTwo = [foo](){ opbrengst foo + 2; }; // op waarde
    auto addThree = [&bar](){ opbrengst maat + 3; }; // op referentie
    automatisch toevoegenAlleWaarde = [=](){ opbrengst foo + reep; }; // alles op waarde
    automatisch toevoegenAlleRef = [&](){ opbrengst foo + reep; }; // alles op referentie

    // maak een variabele in de capture-clausule
    auto createVarInCapture = [fooBar = foo + bar](){ opbrengst fooBar * 5; };

    // no capture - retourneert fout omdat foo niet toegankelijk is
    auto errorExpression = [](){ opbrengst foo + 2; };

  2. Parameters: Dit deel van de lambda-expressie is ook optioneel. Het bevat de door de lambda vereiste functieparameters. Dit is niet anders dan de gebruikelijke manier waarop u functieparameters definieert in C++.
  3. Opties: U kunt ook opties opgeven bij het definiëren van een lambda-expressie. Enkele opties die je zou kunnen gebruiken zijn: veranderlijk, uitzondering (bijv nee behalve in de eerste voorbeeldcode), ->retourtype (bijv ->int), vereist, attributen, enz. De veranderlijk optie wordt vaak gebruikt omdat het vangt aan te passen is binnen de lambda. Onderstaande code laat dit zien.
    int waarde = 10;

    // retourneert een fout - waarde is een const binnen de expressie
    automatisch verlagen = [waarde](){ opbrengst --waarde; };
    auto increment = [waarde]() veranderlijk { opbrengst ++waarde; };
    verhogen(); // 11

    Hoewel de andere opties zelden worden gebruikt, kunt u er meer informatie over krijgen op de cppreference.com pagina over lambda's.
  4. Uitdrukkingslichaam: Dit is de body van de lambda-expressie die een waarde uitvoert en retourneert, net zoals een functie zou doen. Indien nodig kunt u de hoofdtekst van een lambda-expressie over meer dan één regel splitsen. Het is echter het beste om het zo kort mogelijk te houden om ongeorganiseerde code te voorkomen.

Wat zijn de voordelen van Lambda-expressies?

Er zijn veel voordelen aan het gebruik van lambda-functies in uw code. Afgezien van een hogere ontwikkelingssnelheid en efficiëntie, zijn de belangrijkste voordelen die u van lambda's krijgt als volgt:

  • Lambda-expressies helpen de code schoon te houden. Een van de beste manieren om uw code eenvoudig en netjes te houden, is door waar mogelijk lambda's te gebruiken. Dit kan erg handig zijn bij het onderhouden van een leesbare en herbruikbare codestructuur.
  • U kunt lambda's doorgeven aan andere functies als parameters. De C++ standaard bibliothekenstandaard:: sort() methode maakt gebruik van dit voordeel. U kunt een lambda doorgeven als een van de parameters van deze methode om aan te geven hoe de functie de sortering moet uitvoeren. Bijvoorbeeld:
     std:: vector<int> arr = {2, 5, 1, 3, 4};
    std:: sorteren (arr.begin(), arr.end(), [](int a, int b){ opbrengst een // arr = {1, 2, 3, 4, 5}
  • Lambda's zijn herbruikbaar. Soms wil je misschien een codeblok herbruikbaar maken in het kader van een functie in je programma zonder dat je een nieuwe functie hoeft te definiëren. Lambda's kunnen in dergelijke gevallen erg nuttig zijn. Beschouw het volgende voorbeeld van een herbruikbare lambda-expressie:
    #erbij betrekken <iostream>
    gebruik makend van naamruimtesoa;

    inthoofd(){
    // definieer een herbruikbare lambda
    auto addUp = [](auto a, auto b, auto c) neebehalve {
    cout <<"Nu optellen... "<< a <<", "<< b <<" en "<< c << endl;
    opbrengst a + b + c ;
    };

    cout << optellen (22, 33, 44) << endl;
    cout << addUp (string("Gelukkig "), snaar("Geboorte"), snaar("dag")) << endl;
    cout << optellen(WAAR, vals, WAAR) << std:: endl; // wordt uitgevoerd als getallen (1 en 0)
    }

    Dit programma geeft het volgende resultaat: Dit voorbeeld laat zien hoe eenvoudig het is om een ​​lambda te definiëren, zodat u deze met elk type kunt gebruiken.

Lambda's gebruiken in C++

Er zijn veel andere voordelen die lambda-expressies bieden, en u zult ze ontdekken naarmate de structuur van uw programma complexer wordt. In feite verwijzen C++-programmeurs soms naar lambda-expressies als sluitingen omdat ze zo'n geweldige manier zijn om sluitingen in code te implementeren.

U moet lambda-expressies overwegen als u moderne C++-concepten in uw codebase wilt opnemen.

11 C++-codefragmenten voor dagelijkse programmeerproblemen

Lees volgende

DeelTweetenDeelE-mail

Gerelateerde onderwerpen

  • Programmeren
  • Programmeren
  • Codeerhandleidingen

Over de auteur

Timilehin Omolana (5 artikelen gepubliceerd)

Timilehin is een software-ingenieur en technisch schrijver die graag de wereld van server-side technologieën en gedistribueerde systemen verkent.

Meer van Timilehin Omolana

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren