Introducción a expresiones lambda
Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 42 de 56.
Las expresiones lambda son una potente característica de C++ que te permite crear funciones pequeñas y anónimas justo donde las necesitas. Piensa en ellas como mini-funciones que puedes definir y usar sin tener que escribir una declaración de función por separado.
La sintaxis básica para una expresión lambda sigue este patrón: [](){}. Los corchetes [] se denominan cláusula de captura, los paréntesis () contienen los parámetros (al igual que las funciones normales) y las llaves {} contienen el cuerpo de la función.
La cláusula de captura controla qué variables del ámbito circundante puede utilizar la lambda. Las formas más comunes son:
[=] — captura todas las variables locales por valor (la lambda obtiene su propia copia)[&] — captura todas las variables locales por referencia (la lambda accede a las originales)[] — no captura nada (la lambda no puede usar ninguna variable externa)Aquí tienes cómo crear y llamar a una lambda simple:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Llamar a la función lambdaTambién puedes definir y ejecutar una lambda inmediatamente sin almacenarla en una variable:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Las expresiones lambda son particularmente útiles para funciones cortas y de un solo uso que no deseas definir por separado. Hacen que tu código sea más conciso y mantienen la lógica relacionada unida.
Desafío
FácilCrea un programa que demuestre la sintaxis básica y la ejecución de expresiones lambda. Este desafío pondrá a prueba tu comprensión sobre cómo definir y llamar funciones lambda simples sin parámetros.
Tu programa debe:
- Crear una expresión lambda que imprima
Hello from Lambda! - Almacenar esta lambda en una variable utilizando la palabra clave
auto - Llamar a la función lambda para ejecutarla
- Crear una segunda expresión lambda que imprima
Lambda executed successfully! - Ejecutar esta segunda lambda inmediatamente sin almacenarla en una variable
Utiliza exactamente el siguiente formato de salida:
Hello from Lambda!
Lambda executed successfully!Recuerda que las expresiones lambda utilizan la sintaxis [](){} donde los corchetes [] son la cláusula de captura, los paréntesis () contienen los parámetros (vacíos para este desafío) y las llaves {} contienen el cuerpo de la función. Puedes almacenar una lambda en una variable usando auto variableName = [](){...}; y luego llamarla con variableName();. Para la ejecución inmediata, puedes usar la sintaxis [](){...}(); que define y llama a la lambda en una sola sentencia.
Hoja de referencia
Las expresiones lambda son funciones anónimas que pueden definirse en línea. Utilizan la sintaxis [](){} donde:
[]- cláusula de captura (controla el acceso a variables externas)()- parámetros{}- cuerpo de la función
Formas comunes de la cláusula de captura:
[]- no capturar nada[=]- capturar todas las variables externas por valor[&]- capturar todas las variables externas por referencia
Almacenar y llamar a una lambda:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Call the lambda functionEjecutar una lambda inmediatamente:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Pruébalo tú mismo
#include <iostream>
using namespace std;
int main() {
// TODO: Escribe tu código a continuación
// Crea una expresión lambda que imprima "Hello from Lambda!"
// Almacénala en una variable usando la palabra clave auto
// Llama a la función lambda
// Crea una segunda lambda que imprima "Lambda executed successfully!"
// Ejecútala inmediatamente sin almacenarla en una variable
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Punteros y memoria
¿Qué es un puntero?Operador de direcciónOperador de desreferenciaPunteros nulosPunteros y arraysMemoria dinámica con 'new'Liberar memoria con 'delete'Resumen: Práctica de punteros4Mapas (Pares Clave-Valor)
Introducción a std::mapCrear un MapaAcceder y Modificar ValoresComprobar ClavesEliminar ParesIterar sobre un MapaResumen - Frecuencia de Palabras7Funciones avanzadas
Paso por referenciaIntroducción a expresiones lambdaLambdas con parámetrosLambdas con valores de retornoIntroducción a la recursividadFactorial recursivoOrdenamiento con lambda2Vectores (Arrays dinámicos)
Introducción a std::vectorCreación de un VectorAgregar elementosAcceder a los elementosTamaño del VectorIterar con un bucle ForBucle For basado en rangosEliminar elementosResumen - Operaciones con Vectores5Proyecto: Herramienta de inventario
Configuración del proyectoAgregar y actualizar artículos3Proyecto: Herramienta de lista de tareas
Descripción general del proyectoAñadir una tarea