Une fonction imbriquée ou fonction interne est une fonction dont la définition est encapsulée dans une autre fonction. Elle ne peut être appelée que par la fonction englobante ou par des fonctions imbriquées directement ou non dans la même fonction englobante.

En d'autres termes, la portée de la fonction imbriquée est limitée par la fonction englobante; elle offre un contrôle très strict de leur visibilité (scope) par le reste du programme.

Exemples

modifier

Un exemple avec la syntaxe de Pascal :

 function E(x: integer): integer
 
     function F(y: integer): integer
     begin
         F := x + y
     end
 
 begin
     E := F(3)
 end

Et le même exemple avec une syntaxe façon C :

 int E(int x)
 {
     int F(int y)
     {
         return x + y;
     }
     return F(3);
 }

Remarque : Le langage C standard ne supporte pas cette construction. Mais certains compilateurs l'acceptent.

La fonction F est imbriquée dans E (notez que x est visible dans F, mais y est invisible en dehors de F).

Exemple en python :

def pourcentages(a,b,c):
    def pc(x):
        return (x*100.0)/(a+b+c)
    return pc(a),pc(b),pc(c)

Les fonctions imbriquées sont une forme d'encapsulation et sont utilisées pour diviser des tâches procédurales en sous-tâches qui n'ont de signification que locale. Elle permet d'éviter la pollution de l'espace global de noms par des noms de fonctions, variables... dont l'usage est restreint à une petite partie du programme.

Parmi les langages les plus connus qui supportent les fonctions imbriquées, il y a

En Scheme et la plupart des langages fonctionnels, les fonctions imbriquées sont une manière commune d'implanter des fonctions comportant des boucles. Une simple fonction imbriquée récursive ou récursion terminale est créée, qui se comporte comme la boucle principale, alors que la fonction englobante effectue les actions qui ne doivent être faites qu'une fois. Dans les cas plus complexes, plusieurs fonctions mutuellement récursives peuvent être créées comme des fonctions imbriquées.

Notes et références

modifier

Voir aussi

modifier

📚 Artikel Terkait di Wikipedia

PaX

wikibooks.org (consulté le 27 décembre 2023) (en) « Trampolines for Nested Functions » dans la documentation de GCC « ASLR | Is OpenBSD secure? », sur isopenbsdsecu

Formule de Viète

voir par exemple cet exercice corrigé sur Wikiversité. (en) L. D. Servi, « Nested square roots of 2 », Amer. Math. Month., vol. 110, no 4,‎ 2003, p. 326-330

Lupus érythémateux disséminé

lupus results in more aggressive disease and worse outcomes: results of a nested matched case–control study within LUMINA, a multiethnic US cohort (LUMINA

C++17

braced-init-list », 13 février 2014 (en) Robert Kawulak et Andrew Tomazos, « N4230 - Nested namespace definition », 10 octobre 2014 (en) Richard Smith, « N4266 - Attributes

Ocytocine

labour and risk of severe postpartum haemorrhage: a population-based, cohort-nested case–control study », BMJ Open, vol. 1, no 2,‎ 2011, e000514 (DOI 10

Elinor Ostrom

les polycentricités, l'encastrement social des organisations telles des 'nested holons', et sa démarche systémique construisent, au fil des travaux d'Ostrom

Réseau trophique

Cattin et al. (2004). Il s’agit du modèle en « hiérarchie imbriquée » (nested-hierarchy model). Ce modèle prend en compte la phylogénie qui doit contraindre

Approximation de π

New Mathematical Diversions, MAA, 1995, p. 92. (en) Martin Schneider, « A nested radical approximation for π » (version du 6 juillet 2011 sur Internet Archive)