C++ Lambda
Funções de primeira classe
Em programação funcional funções são cidadães de primeira classe, o que significa que elas se comportam com dados e suportam quaisquer operações que a linguagem permita.
Algumas características das funções de primeira classe são:
- atribuir uma função a uma variável
- passar uma função como parâmetro para outra função
- retornar a função como valor de outra função
- armazenar a função em uma estrutura de dados
Lambdas
Lambdas são funções anônimas (sem um nome) definidas in-place.
// 1 2 3 4
[ ] ( ) { std::cout << "Hello from C++ Lambda!" << std::endl; } ( );
Vamos ver o que cada grupo significa:
- 1
[]
lambda introducer
oulambda closure
- 2
()
lista de parâmetros (você pode omitir estes parêntes se a função não receber parâmetros). - 3
{}
corpo da função lambda - 4
()
executa a função
Programação funcional com lambdas
// f(x,y) = x² + y² + 2xy;
std::function<int(int,int)> fxsquare = [](int x, int y) -> int {
int xsquare = [](int x) -> int { return x * x; }(x);
int ysquare = [](int y) -> int { return y * y; }(y);
int twoxy = [](int x, int y) -> int { return 2 * x * y; }(x,y);
return xsquare + ysquare + twoxy;
}
cout << fxsquare(5,3) << endl; // 64