Za pomocą Timilehin Omolana
DzielićĆwierkaćDzielićE-mail

Dowiedz się, jak lambdy mogą sprawić, że Twój kod będzie bardziej wydajny i łatwiejszy w utrzymaniu.

Języki programowania nieustannie ewoluują, nawet takie jak C++, które zadomowiły się dawno temu. Dodają funkcje do standardowych bibliotek i wprowadzają inne zmiany, aby ułatwić pracę programistom pracującym w dynamicznym polu.

W ramach aktualizacji wprowadzonych przez ewolucję języka C++ dodał obsługę wyrażeń lambda w wersji 2011.

Czym dokładnie jest wyrażenie lambda i jak możesz go wykorzystać jako programista C++?

Co to jest wyrażenie lambda?

Wyrażenie lambda jest również znane jako funkcja lambda. Jest to wyrażenie wbudowane z możliwością przyjmowania argumentów, wykonywania operacji i zwracania wartości, tak jak typowa funkcja.

Możesz użyć lambdy wewnątrz innej funkcji i przypisać ją do zmiennej. Funkcje lamba to praktyczny sposób definiowania anonimowego obiektu funkcji w programie. Prawie każdy język obsługuje lambdy, chociaż każda implementacja różni się od pozostałych.

instagram viewer

Jakie są części wyrażenia lambda C++?

Wyrażenia lambda są łatwe w użyciu w C++. Możesz rozbić składnię wyrażenia lambda w C++ w następujący sposób:

[capture_clause](parameters) options { expression_body; }

Na przykład:

int wart = 13;
automatyczny sumDodatniaWartość = [wartość](int a, int b) zmiennybez wyjątku ->int { zwrócić val + a + b; };
sumaplusVal(2, 5); // 20

Ten kod deklaruje sumPlusVal zmienna auto, ponieważ wyrażenie lambda może przyjmować i zwracać dowolny typ danych. To pozostawia kompilatorowi określenie typu podczas kompilacji.

Z powyższego kodu widać, że wyrażenie lambda zawiera kilka części, które określają sposób jego działania. Oto krótki przegląd każdego z tych komponentów.

  1. Klauzula przechwytywania: Jest to pierwsza część wyrażenia lambda, w której można określić istniejące wcześniej zmienne lub zdefiniować nowe do użycia w treści wyrażenia. Istnieją różne sposoby określania przechwytywania, na przykład:
    auto dodaj dwa = [foo](){ zwrócić foo + 2; }; // według wartości
    auto addThree = [&bar](){ zwrócić pasek + 3; }; // przez odniesienie
    auto addAllVal = [=](){ zwrócić foo + bar; }; // wszystko według wartości
    auto addAllRef = [&](){ zwrócić foo + bar; }; // wszystko przez odniesienie

    // utwórz zmienną w klauzuli przechwytywania
    auto createVarInCapture = [fooBar = foo + bar](){ zwrócić fooBar * 5; };

    // brak przechwytywania - zwraca błąd, ponieważ foo jest niedostępne
    auto errorExpression = [](){ zwrócić foo + 2; };

  2. Parametry: Ta część wyrażenia lambda jest również opcjonalna. Zawiera parametry funkcji wymagane przez lambdę. Nie różni się to niczym od zwykłego sposobu definiowania parametrów funkcji w C++.
  3. Opcje: Możesz również określić opcje podczas definiowania wyrażenia lambda. Niektóre opcje, których możesz użyć, to: zmienny, wyjątek (np bez wyjątku w pierwszym przykładowym kodzie), -> typ_zwrotu (np ->int), wymaga, atrybutyitp. The zmienny Opcja jest często używana, ponieważ pozwala na modyfikację przechwytywania wewnątrz lambdy. Poniższy kod pokazuje to.
    int wartość = 10;

    // zwraca błąd - wartość jest stałą wewnątrz wyrażenia
    auto dekrementacja = [wartość](){ zwrócić --wartość; };
    auto inkrementacja = [wartość]() zmienna { zwrócić ++wartość; };
    przyrost(); // 11

    Chociaż inne opcje są rzadko używane, więcej informacji na ich temat można uzyskać na cppreference.com strona o lambdach.
  4. Ciało ekspresji: To jest treść wyrażenia lambda, które wykonuje i zwraca wartość, podobnie jak robiłaby to funkcja. W razie potrzeby możesz podzielić treść wyrażenia lambda na więcej niż jeden wiersz. Jednak najlepszą praktyką jest trzymanie go tak krótko, jak to możliwe, aby zapobiec dezorganizacji kodu.

Jakie są zalety wyrażeń lambda?

Korzystanie z funkcji lambda w kodzie ma wiele zalet. Oprócz zwiększonej szybkości i wydajności rozwoju, najważniejsze korzyści płynące z lambd są następujące:

  • Wyrażenia lambda pomagają utrzymać kod w czystości. Jednym z najlepszych sposobów, aby kod był prosty i schludny, jest używanie lambd tam, gdzie to możliwe. Może to być bardzo pomocne w utrzymaniu czytelnej i wielokrotnego użytku struktury kodu.
  • Możesz przekazać lambdy do innych funkcji jako parametry. The Standardowe biblioteki C++std:: sortowanie() metoda korzysta z tej korzyści. Możesz przekazać lambdę jako jeden z parametrów tej metody, aby określić, w jaki sposób funkcja powinna przeprowadzić sortowanie. Na przykład:
     std:: wektor<int> przyp = {2, 5, 1, 3, 4};
    std:: sortuj (arr.begin(), arr.end(), [](int a, int b){ zwrócić a < b; });
    // arr = {1, 2, 3, 4, 5}
  • Lambdy są wielokrotnego użytku. Czasami możesz chcieć zrobić blok kodu wielokrotnego użytku w zakresie funkcji w twoim programie bez konieczności definiowania nowej funkcji. W takich przypadkach bardzo pomocne mogą być lambdy. Rozważmy następujący przykład wyrażenia lambda wielokrotnego użytku:
    #włączać <jostream>
    za pomocą przestrzeń nazwstandardowe;

    intGłówny(){
    // zdefiniuj lambda wielokrotnego użytku
    auto addUp = [](auto a, auto b, auto c) noexcept {
    Cout <<"Teraz sumuję... "<< a <<", "<< b <<" oraz "<< c << koniecl;
    zwrócić a + b + c ;
    };

    Cout << sumowanie (22, 33, 44) << koniecl;
    Cout << addUp (ciąg("Szczęśliwy "), strunowy("Narodziny"), strunowy("dzień")) << koniecl;
    cout << dodatek(PRAWDA, fałszywy, PRAWDA) << std:: endl; // wykonuje jako liczby (1 i 0)
    }

    Ten program daje następujący wynik: Ten przykład pokazuje, jak proste jest zdefiniowanie lambdy, aby można było jej używać z dowolnym typem.

Używanie lambd w C++

Istnieje wiele innych korzyści, jakie oferują wyrażenia lambda, a odkryjesz je, gdy struktura Twojego programu stanie się bardziej złożona. W rzeczywistości programiści C++ czasami nazywają wyrażenia lambda domknięciami, ponieważ są świetnym sposobem na implementację domknięć w kodzie.

Należy rozważyć wyrażenia lambda, jeśli chcesz włączyć nowoczesne koncepcje C++ do swojej bazy kodu.

11 fragmentów kodu C++ dla codziennych problemów z programowaniem

Czytaj dalej

DzielićĆwierkaćDzielićE-mail

Powiązane tematy

  • Programowanie
  • Programowanie
  • Poradniki kodowania

O autorze

Timilehin Omolana (5 opublikowanych artykułów)

Timilehin jest inżynierem oprogramowania i pisarzem technicznym, który uwielbia poznawać świat technologii serwerowych i systemów rozproszonych.

Więcej od Timilehina Omolana

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować