от Тимилехин Омолана
ДялTweetДялелектронна поща

Научете как lambdas могат да направят вашия код по-ефективен и по-лесен за поддръжка.

Езиците за програмиране непрекъснато се развиват, дори тези като C++, които са се установили отдавна. Те добавят функции към стандартните библиотеки и правят други промени, за да улеснят работата на програмистите, работещи в динамична област.

Като част от актуализациите, предизвикани от еволюцията на езика, C++ добави поддръжка за ламбда изрази в своята версия от 2011 г.

Какво точно е ламбда израз и как можете да го използвате в своя полза като C++ програмист?

Какво е ламбда израз?

Ламбда изразът е известен също като ламбда функция. Това е вграден израз с възможност за приемане на аргументи, извършване на операции и връщане на стойност, точно като типична функция.

Можете да използвате ламбда в друга функция и да я присвоите на променлива. Lamba функциите са практичен начин за дефиниране на анонимен функционален обект в програма. Почти всеки език поддържа ламбда, въпреки че всяка реализация се различава от другите.

instagram viewer

Какви са частите на C++ ламбда израз?

Ламбда изразите са лесни за използване в C++. Можете да разбиете синтаксиса на ламбда израз в C++, както следва:

[capture_clause](параметри) опции { израз_тяло; }

Например:

вътр стойност = 13;
Автоматичен sumPlusVal = [val](вътр а, вътр б) променливnoexcept ->вътр { връщане val + a + b; };
sumPlusVal(2, 5); // 20

Този код декларира sumPlusVal променлива auto, тъй като ламбда изразът може да приема и връща всеки тип данни. Това оставя на компилатора да определи типа по време на компилация.

От кода по-горе можете да видите, че ламбда изразът съдържа няколко части, които указват как работи. Ето кратък преглед на всеки от тези компоненти.

  1. Клауза за улавяне: Това е първата част от ламбда израз, където можете да посочите съществуващи променливи или да дефинирате нови, които да използвате в тялото на израза. Има различни начини за указване на заснемания, например:
    auto addTwo = [foo](){ връщане foo + 2; }; // по стойност
    auto addThree = [&bar](){ връщане бар + 3; }; // чрез справка
    auto addAllVal = [=](){ връщане foo + бар; }; // всички по стойност
    auto addAllRef = [&](){ връщане foo + бар; }; // всичко чрез препратка

    // създаване на променлива в клаузата за улавяне
    auto createVarInCapture = [fooBar = foo + bar](){ връщане fooBar * 5; };

    // няма улавяне - връща грешка, защото foo не е достъпно
    автоматичен израз за грешка = [](){ връщане foo + 2; };

  2. Параметри: Тази част от ламбда израза също не е задължителна. Той съдържа функционалните параметри, изисквани от ламбда. Това не е по-различно от обичайния начин, по който бихте дефинирали функционални параметри в C++.
  3. Настроики: Можете също да зададете опции, когато дефинирате ламбда израз. Някои опции, които можете да използвате, са: променлив, изключение (напр noexcept в първия примерен код), ->return_type (напр ->вътр), изисква, атрибутии т.н. The променлив опцията често се използва, защото позволява улавянията да могат да се променят вътре в ламбда. Кодът по-долу демонстрира това.
    вътр стойност = 10;

    // връща грешка - стойността е константа вътре в израза
    автоматично намаляване = [стойност](){ връщане --стойност; };
    автоматично увеличение = [стойност]() променлив { връщане ++стойност; };
    увеличение (); // 11

    Въпреки че другите опции се използват рядко, можете да получите повече информация за тях на cppreference.com страница за ламбда.
  4. Изразително тяло: Това е тялото на ламбда израза, което изпълнява и връща стойност, подобно на функция. Ако е необходимо, можете да разделите тялото на ламбда израз на повече от един ред. Най-добрата практика обаче е да бъде възможно най-кратък, за да се предотврати неорганизиран код.

Какви са предимствата на ламбда изразите?

Има много предимства при използването на ламбда функции във вашия код. Освен увеличената скорост и ефективност на разработката, основните предимства, които получавате от ламбда, са следните:

  • Ламбда изразите помагат да се поддържа чист кода. Един от най-добрите начини да поддържате кода си прост и чист е като използвате ламбда, където е възможно. Това може да бъде много полезно за поддържане на четлива и повторно използваема структура на кода.
  • Можете да предавате ламбда към други функции като параметри. The C++ стандартни библиотекиstd:: sort() методът използва това предимство. Можете да подадете ламбда като един от параметрите на този метод, за да посочите как функцията трябва да извърши сортирането. Например:
     std:: вектор<вътр> arr = {2, 5, 1, 3, 4};
    std:: sort (arr.begin(), arr.end(), [](вътр а, вътр б){ връщане a < b; });
    // arr = {1, 2, 3, 4, 5}
  • Ламбдите са за многократна употреба. Понякога може да искате да направите блок от код за многократна употреба в обхвата на функция във вашата програма, без да се налага да дефинирате нова функция. Ламбдите могат да бъдат много полезни в такива случаи. Разгледайте следния пример за многократно използваем ламбда израз:
    #включи <iostream>
    използвайки пространство от именаstd;

    вътросновен(){
    // дефинира ламбда за многократна употреба
    auto addUp = [](auto a, auto b, auto c) noexcept {
    cout <<"Сега добавяне... "<< а <<", "<< b <<" и "<< ° С << endl;
    връщане a + b + c ;
    };

    cout << addUp (22, 33, 44) << endl;
    cout << addUp (низ("Щастлив "), низ ("Раждане"), низ ("ден")) << endl;
    cout << addUp(вярно, невярно, вярно) << std:: endl; // изпълнява се като числа (1 и 0)
    }

    Тази програма дава следния резултат: Този пример демонстрира колко лесно е да дефинирате ламбда, така че да можете да го използвате с всеки тип.

Използване на Lambda в C++

Има много други предимства, които предлагат ламбда изразите, и вие ще ги откриете, когато структурата на вашата програма стане по-сложна. Всъщност C++ програмистите понякога наричат ​​ламбда изразите затваряния, защото те са толкова чудесен начин за прилагане на затваряния в кода.

Трябва да обмислите ламбда изрази, ако искате да включите съвременни концепции на C++ във вашата кодова база.

11 кодови фрагмента на C++ за ежедневни проблеми с програмирането

Прочетете Напред

ДялTweetДялелектронна поща

Свързани теми

  • Програмиране
  • Програмиране
  • Уроци по кодиране

За автора

Тимилехин Омолана (5 публикувани статии)

Timilehin е софтуерен инженер и технически писател, който обича да изследва света на сървърните технологии и разпределените системи.

Още от Timilehin Omolana

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и изключителни сделки!

Щракнете тук, за да се абонирате