Durch Timilehin Omolana
TeilenTwitternTeilenEmail

Erfahren Sie, wie Lambdas Ihren Code effizienter und pflegeleichter machen können.

Programmiersprachen entwickeln sich ständig weiter, auch solche wie C++, die sich schon vor langer Zeit etabliert haben. Sie fügen Funktionen zu Standardbibliotheken hinzu und nehmen andere Änderungen vor, um die Arbeit von Programmierern zu erleichtern, die in einem dynamischen Bereich arbeiten.

Als Teil der Aktualisierungen, die durch die Weiterentwicklung der Sprache hervorgerufen wurden, fügte C++ in seiner Veröffentlichung von 2011 Unterstützung für Lambda-Ausdrücke hinzu.

Was genau ist ein Lambda-Ausdruck und wie können Sie ihn als C++-Programmierer zu Ihrem Vorteil nutzen?

Was ist ein Lambda-Ausdruck?

Ein Lambda-Ausdruck wird auch als Lambda-Funktion bezeichnet. Es ist ein Inline-Ausdruck mit der Fähigkeit, Argumente zu akzeptieren, Operationen auszuführen und einen Wert zurückzugeben, genau wie eine typische Funktion.

instagram viewer

Sie können ein Lambda innerhalb einer anderen Funktion verwenden und es einer Variablen zuweisen. Lamba-Funktionen sind eine praktische Möglichkeit, ein anonymes Funktionsobjekt in einem Programm zu definieren. Nahezu jede Sprache unterstützt Lambdas, obwohl sich jede Implementierung von den anderen unterscheidet.

Was sind die Teile eines C++-Lambda-Ausdrucks?

Lambda-Ausdrücke sind in C++ einfach zu verwenden. Sie können die Syntax eines Lambda-Ausdrucks in C++ wie folgt aufschlüsseln:

[capture_clause](parameters) options { expression_body; }

Zum Beispiel:

int Wert = 13;
Auto SummePlusWert = [Wert](int a, int b) veränderlichneinaußer ->int { Rückkehr Wert + a + b; };
SummePlusWert(2, 5); // 20

Dieser Code deklariert die SummePlusWert Variable auto, da ein Lambda-Ausdruck jeden Datentyp akzeptieren und zurückgeben kann. Dies überlässt es dem Compiler, den Typ während der Kompilierung zu bestimmen.

Aus dem obigen Code können Sie ersehen, dass ein Lambda-Ausdruck mehrere Teile enthält, die angeben, wie er funktioniert. Hier ist ein kurzer Überblick über jede dieser Komponenten.

  1. Capture-Klausel: Dies ist der erste Teil eines Lambda-Ausdrucks, in dem Sie bereits vorhandene Variablen angeben oder neue zur Verwendung im Ausdruckshauptteil definieren können. Es gibt verschiedene Möglichkeiten, Captures anzugeben, zum Beispiel:
    auto addTwo = [foo](){ Rückkehr foo + 2; }; // nach Wert
    auto addThree = [&bar](){ Rückkehr Balken + 3; }; // durch Referenz
    auto addAllVal = [=](){ Rückkehr foo + bar; }; // alle nach Wert
    auto addAllRef = [&](){ Rückkehr foo + bar; }; // alle per Referenz

    // eine Variable in der Capture-Klausel erstellen
    auto createVarInCapture = [fooBar = foo + bar](){ Rückkehr fooBar * 5; };

    // keine Erfassung - gibt einen Fehler zurück, da auf foo nicht zugegriffen werden kann
    automatischer Fehlerausdruck = [](){ Rückkehr foo + 2; };

  2. Parameter: Dieser Teil des Lambda-Ausdrucks ist ebenfalls optional. Es enthält die vom Lambda benötigten Funktionsparameter. Dies unterscheidet sich nicht von der üblichen Art, Funktionsparameter in C++ zu definieren.
  3. Optionen: Sie können auch Optionen angeben, wenn Sie einen Lambda-Ausdruck definieren. Einige Optionen, die Sie verwenden könnten, sind: veränderlich, Ausnahme (z.B neinaußer im ersten Beispielcode), ->return_type (z.B -> int), erfordert, Attribute, etc. Das veränderlich Die Option wird häufig verwendet, da sie ermöglicht, dass Erfassungen innerhalb des Lambda geändert werden können. Der folgende Code demonstriert dies.
    int Wert = 10;

    // gibt einen Fehler zurück - Wert ist eine Konstante innerhalb des Ausdrucks
    automatische Abnahme = [Wert](){ Rückkehr --Wert; };
    automatisches Inkrement = [Wert]() änderbar { Rückkehr ++Wert; };
    Zuwachs(); // 11

    Obwohl die anderen Optionen selten verwendet werden, können Sie weitere Informationen darüber auf der erhalten cpreference.com Seite über Lambdas.
  4. Ausdruckskörper: Dies ist der Körper des Lambda-Ausdrucks, der einen Wert ausführt und zurückgibt, ähnlich wie es eine Funktion tun würde. Bei Bedarf können Sie den Hauptteil eines Lambda-Ausdrucks auf mehr als eine Zeile aufteilen. Es empfiehlt sich jedoch, es so kurz wie möglich zu halten, um unorganisierten Code zu vermeiden.

Was sind die Vorteile von Lambda-Ausdrücken?

Die Verwendung von Lambda-Funktionen in Ihrem Code bietet viele Vorteile. Abgesehen von der erhöhten Entwicklungsgeschwindigkeit und -effizienz sind die wichtigsten Vorteile, die Sie von Lambdas erhalten, die folgenden:

  • Lambda-Ausdrücke helfen, den Code sauber zu halten. Eine der besten Möglichkeiten, Ihren Code einfach und ordentlich zu halten, ist die Verwendung von Lambdas, wo immer dies möglich ist. Dies kann sehr hilfreich sein, um eine lesbare und wiederverwendbare Codestruktur beizubehalten.
  • Sie können Lambdas als Parameter an andere Funktionen übergeben. Das C++-Standardbibliothekenstd:: sort() Methode macht sich diesen Vorteil zunutze. Sie können ein Lambda als einen der Parameter dieser Methode übergeben, um anzugeben, wie die Funktion die Sortierung durchführen soll. Zum Beispiel:
     std:: Vektor<int> arr = {2, 5, 1, 3, 4};
    std:: sort (arr.begin(), arr.end(), [](int a, int b){ Rückkehr a < b; });
    // arr = {1, 2, 3, 4, 5}
  • Lambdas sind wiederverwendbar. Manchmal möchten Sie vielleicht einen Codeblock im Bereich einer Funktion in Ihrem Programm wiederverwendbar machen, ohne eine neue Funktion definieren zu müssen. Lambdas können in solchen Fällen sehr hilfreich sein. Betrachten Sie das folgende Beispiel eines wiederverwendbaren Lambda-Ausdrucks:
    #enthalten <iostream>
    verwenden NamensraumStandard;

    inthauptsächlich(){
    // wiederverwendbares Lambda definieren
    auto addUp = [](auto a, auto b, auto c) noaußer {
    cout <<"Jetzt zusammenzählen... "<< a <<", "<< b <<" und "<< c << endl;
    Rückkehr a + b + c ;
    };

    cout << addUp (22, 33, 44) << endl;
    cout << addUp (Zeichenfolge ("Glücklich "), Zeichenfolge ("Geburt"), Zeichenfolge ("Tag")) << endl;
    cout << addUp(Stimmt, FALSCH, Stimmt) << std:: endl; // wird als Zahlen ausgeführt (1 und 0)
    }

    Dieses Programm erzeugt das folgende Ergebnis: Dieses Beispiel zeigt, wie einfach es ist, ein Lambda zu definieren, damit Sie es mit jedem Typ verwenden können.

Verwenden von Lambdas in C++

Es gibt viele weitere Vorteile, die Lambda-Ausdrücke bieten, und Sie werden sie entdecken, wenn die Struktur Ihres Programms komplexer wird. Tatsächlich beziehen sich C++-Programmierer manchmal auf Lambda-Ausdrücke als Closures, weil sie so eine großartige Möglichkeit sind, Closures in Code zu implementieren.

Sie sollten Lambda-Ausdrücke in Betracht ziehen, wenn Sie moderne C++-Konzepte in Ihre Codebasis integrieren möchten.

11 C++ Codeschnipsel für alltägliche Programmierprobleme

Lesen Sie weiter

TeilenTwitternTeilenEmail

Verwandte Themen

  • Programmierung
  • Programmierung
  • Coding-Tutorials

Über den Autor

Timilehin Omolana (5 veröffentlichte Artikel)

Timilehin ist ein Softwareingenieur und technischer Redakteur, der es liebt, die Welt der serverseitigen Technologien und verteilten Systeme zu erkunden.

Mehr von Timilehin Omolana

Abonnieren Sie unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um sich anzumelden