À retenir
- Elle capture les variables locales de son lieu de naissance.
- Elle permet de créer des fonctions avec un état interne persistant.
- C'est un concept fondamental pour l'encapsulation et la sécurité des données.
Une fermeture est une fonction capable de mémoriser et d'accéder aux variables de l'environnement dans lequel elle a été créée, même si cet environnement n'existe plus. C'est un peu comme si une fonction voyageait avec son propre petit sac à dos contenant les données dont elle a besoin pour fonctionner.
Étymologie
Traduction directe du terme anglais closure. En informatique, cela fait référence au fait que la fonction "clôture" ou enveloppe son environnement de définition pour le transporter avec elle.
Exemples d'usage
- Une fonction qui génère des compteurs indépendants, chacun gardant sa propre valeur interne en mémoire.
- Un bouton sur une page web qui, lorsqu'on clique dessus, utilise une variable définie bien plus haut dans le code pour afficher un message personnalisé.
Cas d'usage
La fermeture est omniprésente dans le développement web (JavaScript) pour gérer des événements, dans la programmation fonctionnelle pour manipuler des données de manière isolée, et pour créer des variables privées qui ne sont pas accessibles depuis l'extérieur d'un module.
Bonnes pratiques
Utilisez les fermetures pour éviter de créer des variables globales qui pourraient entrer en conflit avec d'autres parties de votre programme. Attention toutefois à ne pas en abuser dans des boucles complexes, car elles peuvent conserver des données en mémoire plus longtemps que prévu (risque de fuite de mémoire).
Synonymes
Antonymes
Conseil
Pour bien visualiser le concept, essayez de coder une fonction qui en renvoie une autre. La fonction interne aura toujours accès aux variables de la fonction externe, ce qui est le cœur du mécanisme de la fermeture.
Questions fréquentes
Quelle est la différence entre une fonction classique et une fermeture ?
Une fonction classique ne connaît que ses propres paramètres et les variables globales, tandis qu'une fermeture se souvient aussi des variables présentes autour d'elle au moment précis où elle a été écrite.
Est-ce que tous les langages supportent les fermetures ?
La plupart des langages modernes le permettent (JavaScript, Python, Swift, Ruby), mais certains langages plus anciens ou de bas niveau nécessitent des manipulations spécifiques pour simuler ce comportement.