35 lines
3.4 KiB
Markdown
35 lines
3.4 KiB
Markdown
up:: [[programmation.fonction|fonction]]
|
||
#s/informatique
|
||
|
||
> [!definition] fermeture
|
||
> En programmation, la fermeture, ou clôture (de l'anglais *closure*) est une fonction accompagnée de son environnement lexical (les variables en dehors de son environnement local qu'elle a pourtant capturé).
|
||
> Cela permet notamment d'utiliser le **contexte de définition** d'une fonction lors de son exécution dans un autre contexte.
|
||
> Le résultat de l'exécution est alors le même que si l'exécution avait eu lieu à l'endroit de sa définition.
|
||
^definition
|
||
|
||
|
||
> [!cite]+ [Programming Paradigms for Dummies: What Every Programmer Should Know](zotero://select/groups/5383243/items/673TMQRT) - [Page 24](zotero://open-pdf/groups/5383243/items/P4L4LCJZ?page=16&annotation=BRVCUS8M)
|
||
> From an implementation viewpoint, a closure combines a procedure with its external references (the references it uses at its definition).
|
||
>
|
||
> > [!note] Notes
|
||
> > fermeture = combiner une fonction avec ses références externes
|
||
> ^BRVCUS8MaP4L4LCJZg5383243p16
|
||
|
||
> [!cite]+ [Programming Paradigms for Dummies: What Every Programmer Should Know](zotero://select/groups/5383243/items/673TMQRT) - [Page 24](zotero://open-pdf/groups/5383243/items/P4L4LCJZ?page=16&annotation=6H6T7X9L)
|
||
> From the programmer’s viewpoint, a closure is a “packet of work”: a program can transform any instructions into a closure at one point in the program, pass it to another point, and decide to execute it at that point. The result of its execution is the same as if the instructions were executed at the point the closure was created.
|
||
>
|
||
> > [!note] Notes
|
||
> > fermeture := permet que le résultat soit le même que si les instructions étaient éxécutées à l'endroit où la fermeture à été créée.
|
||
> ^6H6T7X9LaP4L4LCJZg5383243p16
|
||
|
||
> [!cite]+ [Fermeture (informatique)](zotero://select/groups/5383243/items/ZKL3R2ZE) - [Page ](zotero://open-pdf/groups/5383243/items/JNZ49HIA?annotation=P8UFCIK5)
|
||
> Dans un langage de programmation, une fermeture ou clôture (en anglais : closure) est une fonction accompagnée de son environnement lexical. L'environnement lexical d'une fonction est l'ensemble des variables non locales qu'elle a capturées, soit par valeur (c'est-à-dire par copie des valeurs des variables), soit par référence (c'est-à-dire par copie des adresses mémoires des variables)[1]. Une fermeture est donc créée, entre autres, lorsqu'une fonction est définie dans le corps d'une autre fonction et utilise des paramètres ou des variables locales de cette dernière.
|
||
> ^P8UFCIK5aJNZ49HIAg5383243
|
||
|
||
> [!cite]+ [Fermeture (informatique)](zotero://select/groups/5383243/items/ZKL3R2ZE) - [Page ](zotero://open-pdf/groups/5383243/items/JNZ49HIA?annotation=N5UF45WT)
|
||
> Une fermeture peut être passée en argument 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 sur la pile d'exécution et libéré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.
|
||
>
|
||
> > [!note] Notes
|
||
> > Le passage *vers le haut* d'une fermeture demande l'accès à des données qui sont libéréres de la pile d'exécution.
|
||
> > Cela est résolu par une allocation sur le tas.
|
||
> ^N5UF45WTaJNZ49HIAg5383243 |