Fermeture (Informatique)


Fermeture (Informatique)

Fermeture (informatique)

Page d'aide sur l'homonymie Pour les articles homonymes, voir Fermeture.

Dans un langage de programmation, une fermeture ou clôture (en anglais, closure) est une fonction qui capture des références à des variables libres de son environnement lexical qui ne sont pas des variables globales. Une fermeture est donc créée lorsqu'une fonction est définie dans le corps d'une autre fonction et fait référence à des variables locales ou des arguments de la fonction dans laquelle elle est définie.

Une fermeture peut être passée en paramètre d'une fonction dans l'environnement où elle a été créée (passée vers le bas) ou renvoyée comme valeur de retour (passée vers le haut). Dans ce cas, le problème posé alors par la fermeture est qu'elle fait référence à des données qui auraient typiquement été allouées dans la pile, et désallouées à la sortie de l'environnement. Hors optimisations par le compilateur, le problème est généralement résolu par une allocation sur le tas de l'environnement.

Exemple de fermeture

La fonction interne ajoute10 a toujours accès à l'argument nombre malgré le fait que l'appel à la fonction ajouteur soit terminé :

-En python:

def ajouteur(nombre) :
  def ajoute(valeur) :
    return valeur + nombre
  return ajoute
 
ajoute10 = ajouteur(10)
ajoute10(1) # retourne 11

-En Javascript:

function ajouteur(nombre) {
  function ajoute(valeur) {
    return valeur + nombre;
  }
 
  return ajoute;
}
 
var ajoute10 = ajouteur(10);
ajoute10(1); // retourne 11

Exemple, en Common Lisp, d'une fonction qui renvoie un prédicat, vrai si son argument est plus grand qu'un certain minimum :

   (defun créer-prédicat-plus-grand-que (min)
     (lambda (x)
       (> x min)))

La fermeture créée dans créer-prédicat-plus-grand-que capture dans son environnement lexical la variable min.

La même fonction en OCaml :

let creer_predicat_plus_grand_que = function
    min -> ( fun x -> x > min)

qui donne :

let sup10 = creer_predicat_plus_grand_que 10;;
sup10 12;;   (* true  *)
sup10 8;;    (* false *)

OCaml permet également de capturer dans une fermeture une valeur modifiable en place (mutable). Par exemple, pour créer un compteur, on définit simultanément 3 fonctions :

let raz, inc, compteur = (* remise à zéro, incrémentation, interrogation *)
  let n = ref 0 in
  (function () -> n:=0),    	(* raz = remise à zéro  *)
  (function () -> n:= !n + 1),  (* inc = incrémentation *)
  (function () -> !n)     	     (* compteur = interrogation  *)

la variable mutable n est capturée dans l'environnement commun des 3 fonctions raz, incr et compteur, qui s'utilisent de la sorte :

compteur();;  (* renvoie 0 *)
inc();;       (* incrémente, ne renvoie rien *)
compteur();;  (* renvoie 1 *)
inc();inc();inc();; (* compteur vaut maintenant 4 *)
raz();;
compteur();;  (* renvoie 0 *)
n;;           (* renvoie "Unbound value n" car n est encapsulée *)
  • Portail de l’informatique Portail de l’informatique
Ce document provient de « Fermeture (informatique) ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Fermeture (Informatique) de Wikipédia en français (auteurs)

Regardez d'autres dictionnaires:

  • Fermeture (informatique) — Pour les articles homonymes, voir Fermeture. Dans un langage de programmation, une fermeture ou clôture (en anglais, closure) est une fonction qui capture des références à des variables libres dans l environnement lexical[1]. Une fermeture est… …   Wikipédia en Français

  • Fermeture De Kleene — Pour les articles homonymes, voir Fermeture. La fermeture de Kleene, parfois appelée étoile de Kleene ou encore fermeture itérative, est un opérateur unaire utilisé pour décrire les langages formels. Appliquée à un ensemble V, elle a pour… …   Wikipédia en Français

  • Fermeture de kleene — Pour les articles homonymes, voir Fermeture. La fermeture de Kleene, parfois appelée étoile de Kleene ou encore fermeture itérative, est un opérateur unaire utilisé pour décrire les langages formels. Appliquée à un ensemble V, elle a pour… …   Wikipédia en Français

  • Informatique Légale — On désigne par informatique légale ou investigation numérique légale l application de techniques et de protocoles d investigation numériques respectant les procédures légales et destinée à apporter des preuves numériques à la demande d une… …   Wikipédia en Français

  • Informatique legale — Informatique légale On désigne par informatique légale ou investigation numérique légale l application de techniques et de protocoles d investigation numériques respectant les procédures légales et destinée à apporter des preuves numériques à la… …   Wikipédia en Français

  • Informatique légiste — Informatique légale On désigne par informatique légale ou investigation numérique légale l application de techniques et de protocoles d investigation numériques respectant les procédures légales et destinée à apporter des preuves numériques à la… …   Wikipédia en Français

  • Fermeture de Kleene — Pour les articles homonymes, voir Fermeture. La fermeture de Kleene, parfois appelée étoile de Kleene ou encore fermeture itérative, est un opérateur unaire utilisé pour décrire les langages formels. Le nom vient de la notation employée: la… …   Wikipédia en Français

  • Fermeture — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Sur les autres projets Wikimedia : « Fermeture », sur le Wiktionnaire (dictionnaire universel) Le terme fermeture renvoie à :… …   Wikipédia en Français

  • Informatique légale — On désigne par informatique légale ou investigation numérique légale l application de techniques et de protocoles d investigation numériques respectant les procédures légales et destinée à apporter des preuves numériques à la demande d une… …   Wikipédia en Français

  • Criminalistique informatique — Informatique légale On désigne par informatique légale ou investigation numérique légale l application de techniques et de protocoles d investigation numériques respectant les procédures légales et destinée à apporter des preuves numériques à la… …   Wikipédia en Français


Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.