Introduction aux expressions Lambda
Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 42 sur 56.
Les expressions lambda sont une fonctionnalité puissante de C++ qui vous permet de créer de petites fonctions anonymes exactement là où vous en avez besoin. Considérez-les comme des mini-fonctions que vous pouvez définir et utiliser sans avoir à écrire une déclaration de fonction séparée.
La syntaxe de base d'une expression lambda suit ce modèle : [](){}. Les crochets [] sont appelés la clause de capture, les parenthèses () contiennent les paramètres (tout comme les fonctions classiques), et les accolades {} contiennent le corps de la fonction.
La clause de capture contrôle quelles variables de la portée environnante la lambda peut utiliser. Les formes les plus courantes sont :
[=] — capturer toutes les variables locales par valeur (la lambda obtient sa propre copie)[&] — capturer toutes les variables locales par référence (la lambda accède aux originaux)[] — ne rien capturer (la lambda ne peut utiliser aucune variable extérieure)Voici comment créer et appeler une lambda simple :
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Appeler la fonction lambdaVous pouvez également définir et exécuter une lambda immédiatement sans la stocker dans une variable :
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Les expressions lambda sont particulièrement utiles pour les fonctions courtes et à usage unique que vous ne souhaitez pas définir séparément. Elles rendent votre code plus concis et maintiennent la logique associée à proximité.
Défi
FacileCréez un programme qui démontre la syntaxe de base et l'exécution des expressions lambda. Ce défi testera votre compréhension de la manière de définir et d'appeler des fonctions lambda simples sans paramètres.
Votre programme doit :
- Créer une expression lambda qui affiche
Hello from Lambda! - Stocker cette lambda dans une variable en utilisant le mot-clé
auto - Appeler la fonction lambda pour l'exécuter
- Créer une deuxième expression lambda qui affiche
Lambda executed successfully! - Exécuter cette deuxième lambda immédiatement sans la stocker dans une variable
Utilisez exactement le format de sortie suivant :
Hello from Lambda!
Lambda executed successfully!Rappelez-vous que les expressions lambda utilisent la syntaxe [](){} où les crochets [] sont la clause de capture, les parenthèses () contiennent les paramètres (vides pour ce défi), et les accolades {} contiennent le corps de la fonction. Vous pouvez stocker une lambda dans une variable en utilisant auto variableName = [](){...}; puis l'appeler avec variableName();. Pour une exécution immédiate, vous pouvez utiliser la syntaxe [](){...}(); qui définit et appelle la lambda en une seule instruction.
Aide-mémoire
Les expressions lambda sont des fonctions anonymes qui peuvent être définies en ligne. Elles utilisent la syntaxe [](){} où :
[]- clause de capture (contrôle l'accès aux variables extérieures)()- paramètres{}- corps de la fonction
Formes courantes de clauses de capture :
[]- ne rien capturer[=]- capturer toutes les variables extérieures par valeur[&]- capturer toutes les variables extérieures par référence
Stocker et appeler une lambda :
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Appeler la fonction lambdaExécuter une lambda immédiatement :
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Essayez vous-même
#include <iostream>
using namespace std;
int main() {
// TODO: Écrivez votre code ci-dessous
// Créer une expression lambda qui affiche "Hello from Lambda!"
// La stocker dans une variable en utilisant le mot-clé auto
// Appeler la fonction lambda
// Créer une deuxième lambda qui affiche "Lambda executed successfully!"
// L'exécuter immédiatement sans la stocker dans une variable
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Pointeurs et mémoire
Qu'est-ce qu'un pointeur ?Opérateur d'adresseOpérateur de déréférencementPointeurs nulsPointeurs et tableauxMémoire dynamique avec 'new'Libérer la mémoire avec 'delete'Récapitulatif - Pratique des pointeurs4Maps (Paires Clé-Valeur)
Introduction à std::mapCréer une MapAccéder aux valeurs et les modifierVérifier l'existence de clésSupprimer des pairesParcourir une MapRécapitulatif - Fréquence des mots7Fonctions avancées
Passage par référenceIntroduction aux expressions LambdaLambdas avec paramètresLambdas avec valeurs de retourIntroduction à la récursivitéFactorielle récursiveTri par Lambda2Vecteurs (Tableaux dynamiques)
Introduction à std::vectorCréer un vecteurAjouter des élémentsAccéder aux élémentsTaille d'un vecteurItérer avec une boucle ForBoucle For basée sur l'intervalleSupprimer des élémentsRécapitulatif - Opérations sur les vecteurs3Projet : Outil de liste de tâches
Présentation du projetAjouter une tâche