À retenir
- Permet à une fonction d'accéder à des données situées en dehors de son bloc de code.
- C'est le principe fondamental des fermetures (closures).
- Peut créer des conflits de noms si une variable locale porte le même nom que la variable capturée.
La capture de variable est un mécanisme par lequel une fonction (souvent une fonction anonyme ou une closure) décide d'emporter avec elle une variable qui se trouve à l'extérieur de son propre code. Imaginez qu'une fonction parte en voyage : elle prend dans son sac à dos une donnée présente dans la pièce où elle a été créée pour pouvoir l'utiliser plus tard, même si elle n'est plus dans cette pièce.
Étymologie
Traduction directe de l'anglais variable capture. Le terme souligne l'idée que la fonction « capture » l'état de son environnement au moment de sa définition pour le figer ou y garder un accès privilégié.
Exemples d'usage
- En JavaScript, une fonction interne qui utilise une variable déclarée dans la fonction parente.
- En Python, une fonction
lambdaqui utilise une variable définie juste au-dessus d'elle dans le script. - Un bouton de site web qui, lorsqu'on clique dessus, affiche un message contenant le nom de l'utilisateur défini ailleurs dans le code.
Cas d'usage
Ce concept est omniprésent dans la programmation fonctionnelle et le développement web. On l'utilise pour créer des fonctions personnalisées à la volée, gérer des événements (clics, timers) ou protéger des données en les rendant accessibles uniquement à certaines fonctions spécifiques.
Bonnes pratiques
Attention à l'effet de bord : si la variable capturée change de valeur après la capture mais avant l'exécution de la fonction, cela peut créer des bugs (notamment dans les boucles for). Il est recommandé d'utiliser des variables immuables (constantes) pour éviter les surprises.
Synonymes
Antonymes
Conseil
Pour bien comprendre, pratiquez avec des closures en JavaScript. Essayez de créer une fonction qui génère d'autres fonctions (un 'compteur' par exemple) : vous verrez comment chaque compteur 'capture' sa propre valeur de départ.
Questions fréquentes
Quelle est la différence entre capture et passage de paramètre ?
Le passage de paramètre est explicite (on donne la donnée à la fonction), tandis que la capture est implicite (la fonction se sert elle-même dans son environnement).
Est-ce que cela consomme plus de mémoire ?
Oui, car l'ordinateur doit garder la variable capturée en mémoire tant que la fonction existe, même si le reste du programme n'en a plus besoin.