Introdução a Expressões Lambda
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 42 de 56.
Expressões lambda são um recurso poderoso do C++ que permite criar funções pequenas e anônimas exatamente onde você precisa delas. Pense nelas como mini-funções que você pode definir e usar sem ter que escrever uma declaração de função separada.
A sintaxe básica para uma expressão lambda segue este padrão: [](){}. Os colchetes [] são chamados de cláusula de captura, os parênteses () contêm parâmetros (assim como funções regulares) e as chaves {} contêm o corpo da função.
A cláusula de captura controla quais variáveis do escopo circundante a lambda pode usar. As formas mais comuns são:
[=] — captura todas as variáveis locais por valor (a lambda recebe sua própria cópia)[&] — captura todas as variáveis locais por referência (a lambda acessa as originais)[] — não captura nada (a lambda não pode usar nenhuma variável externa)Veja como criar e chamar uma lambda simples:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Chama a função lambdaVocê também pode definir e executar uma lambda imediatamente sem armazená-la em uma variável:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Expressões lambda são particularmente úteis para funções curtas e de uso único que você não deseja definir separadamente. Elas tornam seu código mais conciso e mantêm a lógica relacionada próxima.
Desafio
FácilCrie um programa que demonstre a sintaxe básica e a execução de expressões lambda. Este desafio testará sua compreensão de como definir e chamar funções lambda simples sem parâmetros.
Seu programa deve:
- Crie uma expressão lambda que imprima
Hello from Lambda! - Armazene esta lambda em uma variável usando a palavra-chave
auto - Chame a função lambda para executá-la
- Crie uma segunda expressão lambda que imprima
Lambda executed successfully! - Execute esta segunda lambda imediatamente sem armazená-la em uma variável
Use o seguinte formato de saída exato:
Hello from Lambda!
Lambda executed successfully!Lembre-se de que as expressões lambda usam a sintaxe [](){} onde os colchetes [] são a cláusula de captura, os parênteses () contêm os parâmetros (vazios para este desafio) e as chaves {} contêm o corpo da função. Você pode armazenar uma lambda em uma variável usando auto variableName = [](){...}; e então chamá-la com variableName();. Para execução imediata, você pode usar a sintaxe [](){...}(); que define e chama a lambda em uma única instrução.
Folha de consulta
Expressões lambda são funções anônimas que podem ser definidas inline. Elas usam a sintaxe [](){} onde:
[]- cláusula de captura (controla o acesso a variáveis externas)()- parâmetros{}- corpo da função
Formas comuns de cláusula de captura:
[]- não captura nada[=]- captura todas as variáveis externas por valor[&]- captura todas as variáveis externas por referência
Armazenar e chamar uma lambda:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Chama a função lambdaExecutar uma lambda imediatamente:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Experimente você mesmo
#include <iostream>
using namespace std;
int main() {
// TODO: Escreva seu código abaixo
// Crie uma expressão lambda que imprima "Hello from Lambda!"
// Armazene-a em uma variável usando a palavra-chave auto
// Chame a função lambda
// Crie uma segunda lambda que imprima "Lambda executed successfully!"
// Execute-a imediatamente sem armazenar em uma variável
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros4Mapas (Pares Chave-Valor)
Introdução ao std::mapCriando um MapaAcessando e Modificando ValoresVerificando ChavesRemovendo ParesIterando sobre um MapaRecapitulação - Frequência de Palavras7Funções Avançadas
Passagem por ReferênciaIntrodução a Expressões LambdaLambdas com ParâmetrosLambdas com Valores de RetornoIntrodução à RecursãoFatorial RecursivoOrdenação com Lambda2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa