Лямбда-выражения

Последнее обновление: 30.04.2024

C++

C#

Dart

F#

JavaScript

Kotlin

Python

Rust

C++

#include <iostream>
 
int main()
{
    // определяем лямбда-выражение
    auto sum { [](int a, int b){return a + b;} };

    // вызываем лямбда-выражение
    std::cout << sum(10, 23) << std::endl;  // 33

    // присваиваем его результат переменной
    int result { sum(1, 4)};
    std::cout << result << std::endl;       // 5
}

Лямбда-выражения в качестве аргументов функций

#include <iostream>
 
void do_operation(int a, int b, int (*op)(int, int))
{
    std::cout << op(a, b) << std::endl; 
}

int main()
{
    do_operation(10, 4, [](int a, int b) {return a + b;});  // 14
    do_operation(10, 4, [](int a, int b) {return a - b;});  // 6
    do_operation(10, 4, [](int a, int b) {return a * b;});  // 40
}

Возвращение лямбда-выражения

#include <iostream>
  
int(*select(int))(int, int);
  
int main()
{
    int(*action)(int, int) {select(1)};  // сложение
    std::cout << action(8, 5) << std::endl; // 13
 
    action = select(2);  // вычитание
    std::cout << action(8, 5) << std::endl; // 3
 
    action = select(3);  // умножение
    std::cout << action(8, 5) << std::endl; // 40
}
  
int(*select(int choice))(int, int)
{
    // возвращаем нужную функцию в зависимости от choice
    switch (choice)
    {
        case 2:
            return [](int x, int y) {return x - y;};
        case 3:
            return  [](int x, int y) {return x * y;};
        default:
            return  [](int x, int y) {return x + y;};
    }
}

C#

// определяем лямбда-выражение
var sum = (int a, int b) => a + b;

// вызываем лямбда-выражение
Console.WriteLine(sum(10, 23));  // 33

// присваиваем его результат переменной
int result = sum(1, 4);
Console.WriteLine(result);       // 5

Лямбда-выражения в качестве аргументов функций

DoOperation(10, 4, (a, b)=>a + b);  // 14
DoOperation(10, 4, (a, b) => a - b);  // 6
DoOperation(10, 4, (a, b) => a * b);  // 40

void DoOperation(int a, int b, Operation op)
{
    Console.WriteLine(op(a, b));
}

delegate int Operation(int a, int b);

Возвращение лямбда-выражения

var action = Select(1);  // сложение
Console.WriteLine(action(8, 5)); // 13

action = Select(2);  // вычитание
Console.WriteLine(action(8, 5)); // 3

action = Select(3);  // умножение
Console.WriteLine(action(8, 5)); // 40

Operation Select(int choice)
{
    // возвращаем нужную функцию в зависимости от choice
    switch (choice)
    {
        case 2:
            return (x, y) => x - y;
        case 3:
            return (x, y) => x * y;
        default:
            return (x, y) => x + y;
    }
}

delegate int Operation(int a, int b);

Dart

В Dart формально нет лямбда-выражений, но есть анонимные функцию, которые во многом аналогичны.

void main() {
	
    // определяем анонимную функцию
	var sum = (a, b) => a + b;
    // вызываем лямбда-выражение
	print(sum(4, 5));		// 9
}

Лямбда-выражения в качестве аргументов функций

void main() {
    operation(10, 4, (a, b)=>a + b);           // 14
    operation(10, 4, (a,b)=>a - b);     // 6
    operation(10, 4, (a, b) => a * b);  // 40
}

void operation(int a, int b, Function op)
{
    print(op(a, b)); 
}

Возвращение лямбда-выражения

void main() {
     
    Function action = select(1);  // сложение
    print(action(8, 5)); // 13

    action = select(2);  // вычитание
    print(action(8, 5)); // 3

    action = select(3);  // умножение
    print(action(8, 5)); // 40
}
Function select(int choice)
{
    // возвращаем нужную функцию в зависимости от choice
    switch (choice)
    {
        case 2:
            return (a, b) => a - b;
        case 3:
            return (a, b) => a * b;
        default:
            return (a, b) => a + b;
    }
}

F#

// определяем лямбда-выражение
let sum = fun a b -> a + b

// вызываем лямбда-выражение
printfn "%d" (sum 10 23)  // 33

// присваиваем его результат переменной
let result = sum 1 4
printfn $"{result}"       // 5

Лямбда-выражения в качестве аргументов функций

let operation x y func = printfn "%d" (func x y)

operation 10 4 (fun x y -> x+y)   // 14
operation 10 4 (fun x y -> x-y)   // 6
operation 10 4 (fun x y -> x*y)   // 40

Возвращение лямбда-выражения

let select choice = 
    // возвращаем нужную функцию в зависимости от choice
    match choice with
        | 2 -> fun x y -> x - y
        | 3 -> fun x y -> x * y
        | _ -> fun x y -> x + y

let mutable action = select 1   // сложение  
printfn "%d" (action 8 5)       // 13

action <- select 2              // вычитание
printfn "%d" (action 8 5)       // 3

action <- select 3              // умножение
printfn "%d" (action 8 5)       // 40

JavaScript

В JavaScript лямбда-выражения формально называются стрелочными функциями (arrow functions). Определение лямбда-выражений

// определяем лямбда-выражение
const sum = (a, b)=> a + b;

// вызываем лямбда-выражение
console.log(sum(10, 23));  // 33

// присваиваем его результат переменной
const result = sum(1, 4);
console.log(result);      // 5

Лямбда-выражения в качестве аргументов функций

function operation(a, b, op)
{
    console.log(op(a, b)); 
}
operation(10, 4, (a, b)=> a + b);	// 14
operation(10, 4, (a, b)=> a - b);	// 6
operation(10, 4, (a, b)=> a * b);	// 40

Возвращение лямбда-выражения

function select(choice)
{
    // возвращаем нужную функцию в зависимости от choice
    switch (choice)
    {
        case 2:
            return (a, b) => a - b;
        case 3:
            return (a, b) => a * b;
        default:
            return (a, b) => a + b;
    }
}

let action = select(1);  // сложение
console.log(action(8, 5)); // 13

action = select(2);  // вычитание
console.log(action(8, 5)); // 3

action = select(3);  // умножение
console.log(action(8, 5)); // 40

Kotlin

Определение лямбда-выражений:

fun main() {

    // определяем лямбда-выражение
    val sum = {a:Int, b:Int -> a + b}
    // вызываем лямбда-выражение
    println(sum(4, 5))		// 9
}

Лямбда-выражения в качестве аргументов функций

fun main() {

    operation(10, 4, {a, b -> a + b})   // 14
    operation(10, 4, {a, b -> a - b})   // 6
    operation(10, 4, {a, b -> a * b})  // 40
}

fun operation(a: Int, b: Int, op: (Int, Int)->Int) {
    println(op(a, b))
}

Возвращение лямбда-выражения

fun main() {
    var action = select(1) // сложение
    println(action(8, 5)) // 13

    action = select(2) // вычитание
    println(action(8, 5)) // 3

    action = select(3) // умножение
    println(action(8, 5)) // 40
}

fun select(choice: Int): (Int,Int)->Int {
    // возвращаем нужную функцию в зависимости от choice
    return when (choice) {
        2 -> {a:Int, b:Int -> a - b}
        3 -> {a:Int, b:Int -> a * b}
        else -> {a:Int, b:Int -> a + b}
    }
}

Python

Определение лямбда-выражений

# определяем лямбда-выражение
sum = lambda a, b: a + b

# вызываем лямбда-выражение
print(sum(10, 23));  # 33

# присваиваем его результат переменной
result = sum(1, 4)
print(result);      # 5

Лямбда-выражения в качестве аргументов функций

def operation(a, b, op):
    print(op(a, b))

operation(10, 4, lambda a, b: a + b);	# 14
operation(10, 4, lambda a, b: a - b);	# 6
operation(10, 4, lambda a, b: a * b);	# 40

Возвращение лямбда-выражения

def select(choice):
    # возвращаем нужную функцию в зависимости от choice
    match choice:
        case 2:
            return lambda a,b: a - b
        case 3:
            return lambda a,b: a * b
        case _:
            return lambda a,b: a + b

action = select(1)  # сложение
print(action(8, 5)) # 13

action = select(2)  # вычитание
print(action(8, 5)) # 3

action = select(3)  # умножение
print(action(8, 5)) # 40

Rust

В Rust лямбда-выражения формально называются анонимными функциями. Определение лямбда-выражений

fn main(){
  
    // определяем лямбда-выражение
    let sum = |a, b| a + b;

    // вызываем лямбда-выражение
    println!("{}", sum(10, 23));  // 33

    // присваиваем его результат переменной
    let result = sum(1, 4);
    println!("{}", result);      // 5
}

Лямбда-выражения в качестве аргументов функций

fn operation(a: i32, b: i32, op: fn(i32, i32) -> i32) {
    println!("{}", op(a, b));
}
fn main(){
  
    operation(10, 4, |a, b| a + b);   // 14
    operation(10, 4, |a, b| a - b);   // 6
    operation(10, 4, |a, b| a * b);  // 40
}

Возвращение лямбда-выражения

fn select(choice: i32)-> fn(i32, i32)->i32 {
    // возвращаем нужную функцию в зависимости от choice
    return match choice {
        2 => |a, b| a - b,
        3 => |a, b| a * b,
        _ => |a, b| a + b
    };
}

fn main(){
  
    let mut action = select(1); // сложение
    println!("{}", action(8, 5)); // 13

    action = select(2); // вычитание
    println!("{}", action(8, 5)); // 3

    action = select(3); // умножение
    println!("{}", action(8, 5)); // 40
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850