Нека започнем в контекста на функцията стрелка на C++, Java, Python и JavaScript. Първо, нека поговорим за анонимните функции като цяло по отношение на компютърните науки и програмирането

В компютърното програмиране анонимна функция (функционален литерал, ламбда абстракция или ламбда израз) е дефиниция на функция, която не е обвързана с идентификатор. Анонимните функции често са аргументи, които се предават на функции от по-висок ред или се използват за конструиране на резултат от функция от по-висок ред, която трябва да върне функция. Ако функцията се използва само веднъж или ограничен брой пъти, анонимната функция може да бъде синтактично по-лека от използването на именувана функция.

Анонимните функции са характеристика на „езиците за програмиране“ от „Lisp“ през 1958 г. и нарастващ брой съвременни езици за програмиране поддържат анонимни функции. Аз лично използвах често за асинхронни методи и за обратни извиквания.

Ламбда изрази в C++

В C++11 и по-нови ламбда израз — често наричан ламбда — е удобен начин за дефиниране на анонимен функционален обект (затваряне) точно на мястото, където се извиква или предава като аргумент на функция. Обикновено ламбда се използват за капсулиране на няколко реда код, които се предават на алгоритми или асинхронни методи.

#include <algorithm>
#include <cmath>
void abssort(float* x, unsigned n) {
    std::sort(x, x + n,
        // Lambda expression begins
        [](float a, float b) {
            return (std::abs(a) < std::abs(b));
        } // end of lambda expression
    );
}

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

Ламбда изрази в Python 🐍

Малки анонимни функции могат да бъдат създадени с ключовата дума lambda. Тази функция връща сумата от двата си аргумента: ламбда a, b: a+b. Ламбда функциите могат да се използват навсякъде, където са необходими функционални обекти. Те са синтактично ограничени до един израз. Семантично те са просто синтактична захар за нормална дефиниция на функция. Подобно на дефинициите на вложени функции, ламбда функциите могат да препращат към променливи от съдържащия се обхват.

def make_incrementor(n):
    return lambda x: x + n

f = make_incrementor(5)
f(0)

f(1)

Надявам се от горния пример да имате груба представа за ламбда функцията в Python

Ламбда изрази—Java 8

Ламбда изразите са въведени в Java 8 и се рекламират като най-голямата функция на Java 8. Ламбда изразите улесняватфункционалното програмиранеи опростяват разработката много. Ще говоря за функционалното програмиране в друга публикация. Ако искате, можете да прочетете за това в Wikipedia.

Синтаксис

Ламбда изразът се характеризира със следния синтаксис.

parameter -> expression body

Примерен код за java 8

public class Java8Lambda {
public static void main(String args[]) {
      Java8Lambda tester = new Java8Lambda();
  
      //with type declaration
      MathOperation addition = (int a, int b) -> a + b;
  
      //with out type declaration
      MathOperation subtraction = (a, b) -> a - b;
  
      //with return statement along with curly braces
 MathOperation multiplication = (int a, int b) -> { return a * b; };
  
 //without return statement and without curly braces
 MathOperation division = (int a, int b) -> a / b;
  
      System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
      System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
      System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
      System.out.println("10 / 5 = " + tester.operate(10, 5, division));
  
      //without parenthesis
      GreetingService greetService1 = message ->
      System.out.println("Hello " + message);
  
      //with parenthesis
      GreetingService greetService2 = (message) ->
      System.out.println("Hello " + message);
  
      greetService1.sayMessage("Rajdeep");
      greetService2.sayMessage("Sougata");
   }
 
   interface MathOperation {
      int operation(int a, int b);
   }
 
   interface GreetingService {
      void sayMessage(String message);
   }
 
   private int operate(int a, int b, MathOperation mathOperation) {
      return mathOperation.operation(a, b);
   }
}

Изход:-

Функции със стрелки в JavaScript ES6

Функция със стрелка е модерен начин за деклариране на анонимна функция. Функциите със стрелки на ES6 имат по-кратък синтаксис в сравнение с функционалните изрази и лексикално обвързват thisстойността. Функциите със стрелки винаги са анонимни и ефективно превръщат function (arguments) { expression }в arguments => expression. Ако използвате израз след стрелка, връщането е имплицитно, така че не се изисква return.

// Parenthesis are optional depending on the number of arguments:
let square = x => x * x;
console.log(square(10));

let add = (a, b) => a + b;
console.log(add(3, 4));