По Тимилехин Омолана
ДелитьсяТвитнутьДелитьсяЭл. адрес

Узнайте, как лямбда-выражения могут сделать ваш код более эффективным и простым в обслуживании.

Языки программирования постоянно развиваются, даже такие, как C++, давно зарекомендовавшие себя. Они добавляют функции в стандартные библиотеки и вносят другие изменения, чтобы облегчить работу программистов, работающих в динамической области.

В рамках обновлений, вызванных эволюцией языка, C++ добавил поддержку лямбда-выражений в выпуске 2011 года.

Что такое лямбда-выражение и как вы можете использовать его в своих интересах как программист C++?

Что такое лямбда-выражение?

Лямбда-выражение также известно как лямбда-функция. Это встроенное выражение с возможностью принимать аргументы, выполнять операции и возвращать значение, как типичная функция.

Вы можете использовать лямбду внутри другой функции и присвоить ее переменной. Функции Lamba — это практичный способ определения объекта анонимной функции в программе. Почти каждый язык поддерживает лямбда-выражения, хотя каждая реализация отличается от других.

instagram viewer

Из каких частей состоит лямбда-выражение C++?

Лямбда-выражения легко использовать в C++. Вы можете разбить синтаксис лямбда-выражения на C++ следующим образом:

[capture_clause](параметры) options { expression_body; }

Например:

инт значение = 13;
авто суммаПлюсВал = [значение](инт а, инт б) изменчивыйнет кроме ->инт { возвращаться вал + а + б; };
суммаПлюсВал(2, 5); // 20

Этот код объявляет суммаПлюсВал переменная auto, потому что лямбда-выражение может принимать и возвращать данные любого типа. Это оставляет за компилятором право определять тип во время компиляции.

Из приведенного выше кода видно, что лямбда-выражение содержит несколько частей, которые определяют, как оно работает. Вот краткий обзор каждого из этих компонентов.

  1. Оговорка о захвате: это первая часть лямбда-выражения, в которой вы можете указать уже существующие переменные или определить новые для использования в теле выражения. Существуют различные способы указания захватов, например:
    авто addTwo = [foo](){ возвращаться фу + 2; }; // по значению
    auto addThree = [&bar](){ возвращаться бар + 3; }; // по ссылке
    авто addAllVal = [=](){ возвращаться фу + бар; }; // все по значению
    авто addAllRef = [&](){ возвращаться фу + бар; }; // все по ссылке

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

    // нет захвата - возвращает ошибку, потому что foo недоступен
    автоматическое выражение ошибки = [](){ возвращаться фу + 2; };

  2. Параметры: Эта часть лямбда-выражения также необязательна. Он содержит параметры функции, требуемые лямбдой. Это ничем не отличается от обычного способа определения параметров функций в C++.
  3. Опции: Вы также можете указать параметры при определении лямбда-выражения. Вот некоторые варианты, которые вы могли бы использовать: изменчивый, исключение (например нет кроме в первом примере кода), -> тип_возврата (например ->целое), требует, атрибуты, так далее. изменчивый Опция часто используется, потому что она позволяет изменять захваты внутри лямбды. Код ниже демонстрирует это.
    инт значение = 10;

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

    Хотя другие параметры используются редко, вы можете получить больше информации о них на cppreference.com страница по лямбдам.
  4. Тело выражения: это тело лямбда-выражения, которое выполняется и возвращает значение, как и функция. При необходимости вы можете разделить тело лямбда-выражения на несколько строк. Тем не менее, рекомендуется делать его как можно более кратким, чтобы предотвратить неорганизованный код.

Каковы преимущества лямбда-выражений?

Есть много преимуществ использования лямбда-функций в вашем коде. Помимо повышения скорости и эффективности разработки, основные преимущества, которые вы получаете от лямбда-выражений, заключаются в следующем:

  • Лямбда-выражения помогают содержать код в чистоте. Один из лучших способов сделать ваш код простым и аккуратным — использовать лямбда-выражения там, где это возможно. Это может быть очень полезно для поддержания удобочитаемой и многократно используемой структуры кода.
  • Вы можете передавать лямбда-выражения другим функциям в качестве параметров.. Стандартная библиотека C++станд:: сортировать() метод использует это преимущество. Вы можете передать лямбду в качестве одного из параметров этого метода, чтобы указать, как функция должна выполнять сортировку. Например:
     станд:: вектор<инт> обр = {2, 5, 1, 3, 4};
    std:: sort (arr.begin(), arr.end(), [](инт а, инт б){ возвращаться а < б; });
    // обр = {1, 2, 3, 4, 5}
  • Лямбды многоразовые. Иногда вам может понадобиться повторно использовать блок кода в рамках функции вашей программы без необходимости определять новую функцию. Лямбды могут быть очень полезны в таких случаях. Рассмотрим следующий пример повторно используемого лямбда-выражения:
    #включают <iostream>
    с использованием пространство именстанд.;

    интглавный(){
    // определяем многократно используемую лямбду
    auto addUp = [](auto a, auto b, auto c) noexcept {
    cout <<"Теперь добавляем... "<< а <<", "<< б <<" а также "<< с << конец;
    возвращаться а + б + с;
    };

    cout << добавить (22, 33, 44) << конец;
    cout << добавить(строка("Счастливый "), нить("Рождение"), нить("день")) << конец;
    cout << добавить(истинный, ЛОЖЬ, истинный) << стд:: эндл; // выполняется как числа (1 и 0)
    }

    Эта программа дает следующий результат: Этот пример демонстрирует, насколько просто определить лямбду, чтобы вы могли использовать ее с любым типом.

Использование лямбда-выражений в C++

Есть много других преимуществ, которые предлагают лямбда-выражения, и вы обнаружите их по мере усложнения структуры вашей программы. На самом деле, программисты на C++ иногда называют лямбда-выражения замыканиями, потому что это отличный способ реализовать замыкания в коде.

Вы должны рассмотреть лямбда-выражения, если хотите включить современные концепции C++ в свою кодовую базу.

11 фрагментов кода C++ для решения повседневных задач программирования

Читать далее

ДелитьсяТвитнутьДелитьсяЭл. адрес

Похожие темы

  • Программирование
  • Программирование
  • Учебники по кодированию

Об авторе

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

Тимилехин — инженер-программист и технический писатель, который любит исследовать мир серверных технологий и распределенных систем.

Другие работы Тимилехина Омоланы

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!

Нажмите здесь, чтобы подписаться