PRATIQUE ALGO/METHODES 
Expliquez-moi... Les closures, pour atteindre les variables inaccessibles
 
Présentes dans de nombreux langages, mais rarement comprises, les closures permettent à une fonction d'accéder à d'autres variables que celles qu'elle supporte directement. (27/07/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

Une closure, ou fermeture en français, est une caractéristique de certains langages de programmation, qui laisse une fonction accéder à d'autres variables que celles directement à sa portée. Ces variables sont alors dites "libres", car dans le contexte de la fonction, elles ne font pas partie de ses arguments.

Ces variables libres ne sont pas forcément globales, ni même locales. Simplement, le langage fait en sorte de conserver et rendre disponible l'environnement de variables auquel appartient une expression, et au sein duquel celle-ci est évaluée. Le plus souvent, une closure est mise en place quand une fonction est déclarée au sein d'une autre, et que la fonction interne utilise les variables locales de la fonction contenant. Également, quand la valeur retournée par une fonction est elle-même une fonction.

Un exemple d'une telle application peut se programmer en JavaScript.
  1. function bonjour(nom) {
  2.   var texte = 'Bonjour ' + nom;
  3.   var dire = function() { alert(texte); }
  4.   dire();
  5.   }
  6. bonjour('Pierre-Antoine');
Ici, sans closure, dire ne pourrait former le contenu de la variable texte correctement étant donné qu'elle dépend d'une variable appartenant à une fonction. La closure permet de "garder en vie" les variables locales d'une fonction après que celle-ci ait été lancée.

Si l'utilité semble évidente, par exemple pour combiner plusieurs valeurs de retour, les closures impliquent aussi de faire attention, car il est facile d'en mettre une en place sans s'en rendre compte, et donc de faire appel à une variable libre plutôt qu'une autre.
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page