Movatterモバイル変換


[0]ホーム

URL:


Aller au contenu
Wikipédial'encyclopédie libre
Rechercher

Fonction de rappel

Un article de Wikipédia, l'encyclopédie libre.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

Cet articlene cite pas suffisamment ses sources().

Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant lesréférences utiles à savérifiabilité et en les liant à la section « Notes et références ».

En pratique :Quelles sources sont attendues ?Comment ajouter mes sources ?

Cet article est uneébauche concernant l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations desprojets correspondants.

Eninformatique, unefonction de rappel (callback en anglais) ou fonction depost-traitement est unefonction qui est passée en argument à une autre fonction. Cette dernière peut alors faire usage de cette fonction de rappel comme de n'importe quelle autre fonction, alors qu'elle ne la connaît pas par avance.

Principe

[modifier |modifier le code]

La technique de la fonction de rappel s'inspire duprincipe d'Hollywood (ouInversion de contrôle) où l'appelant laisse ses coordonnées pour pouvoir être rappelé par la suite. L'intérêt est le passage à un modèle événementiel et modulaire.

Illustration

[modifier |modifier le code]

Prenons l'exemple d'un programme contenant une partieAnalyseur effectuant par exemple l'analyse lexicale d'un document. Supposons qu'une partieTraitement du programme, soit capable de compter les occurrences des mots qui lui sont transmis. SiTraitement se déclare en attente d'événements émanant d'Analyseur pour chaque mot reconnu au moyen d'une fonction de rappel, alors le programme global permettra de compter les occurrences des mots du texte analysé. Or, la partieAnalyseur ne gère pas spécifiquement le comptage des mots et ne dépend pas deTraitement. Elle peut donc êtreréutilisée pour une autre tâche comme le test de la présence de mots-clés.

Pseudo-code de l'Analyseur :

// Variable de type fonction stockant la fonction de rappelfonction(mot) traiterMot;// Affectation de la fonction de rappelfixerFonctionTraitementMot(fonction(mot) f) {  traiterMot <- f;}// Corps de l'analyseuranalyse() {  ...  traiterMot(mot);  ...}

Pseudo-code duTraitement :

// Définition de la fonction qui sera rappeléenouvelleOccurrence(mot) {  ...}

Pseudo-code du programme principal :

// préparation du rappel et fixerFonctionTraitementMot(nouvelleOccurrence);//appel de l'analyseuranalyse();

Exemple

[modifier |modifier le code]

Dans un tableau de nombres, nous recherchons le premier entier supérieur strictement à 5 parmi les 5 premiers éléments du tableau. (enlangage C).


La première approche sans fonction de rappel :

inti;intlength=5;for(i=0;i<length;i++){if(array[i]>5){printf("Item %d\n",i);break;}}if(i==length){printf("Not found\n");}

La seconde avec fonction de rappel :

/* LIBRARY CODE */inttraverseWith(intarray[],size_tlength,int(*callback)(intindex,intitem,void*param),void*param){intexitCode=0;for(inti=0;i<length;i++){exitCode=callback(i,array[i],param);if(exitCode!=0){break;}}returnexitCode;}/* APPLICATION CODE */intsearch(intindex,intitem,void*param){if(item>5){*(int*)param=index;return1;}else{return0;}}/* (in another function) */intindex;intfound;found=traverseWith(array,length,&search,&index);if(found){printf("Item %d\n",index);}else{printf("Not found\n");}

Mise en œuvre par passage de fonctions en paramètre

[modifier |modifier le code]

Lesfonctions de rappel ont été très utilisées enprogrammation système et notamment enlangage C. En effet, le C a permis assez tôt de passer despointeurs de fonctions en paramètre d'autres fonctions. Cela le rendait techniquement capable d'implémenter le mécanisme des fonctions de rappel.

Le passage de fonction en paramètre est généralisé enprogrammation fonctionnelle. Toutefois dans ce cadre, on ne parle plus de fonction de rappel. Dans ce paradigme, les fonctions sont des éléments de première classe (au même titre que les constantes par exemple). Aussi, les fonctions qui peuvent prendre d'autres fonctions en argument et/ou renvoyer une fonction comme valeur de retour sont alors qualifiées defonctions d'ordre supérieur.

Évolution du principe

[modifier |modifier le code]

Avec l'apparition de laprogrammation objet et desinterfaces, la technique de rappel a évolué. On passe maintenant en paramètre un objet qui se conforme à une interface donnée. Il n'y a donc plus une, mais autant de fonctions que l'on souhaite rappeler. De plus le fait de passer un objet permet de contextualiser en indiquant sur quoi s'effectue le rappel, tandis qu'une fonction de rappel précisait seulement comment rappeler. Cependant la technique des fonctions de rappel continue à avoir les faveurs des langages disposant defermetures, où celles-ci offrent des capacités équivalentes aux objets en termes de contexte.

Voir aussi

[modifier |modifier le code]
v ·m
Bibliothèque logicielle
Vocabulaire
Fonctions
Objet
ÉvénementielInversion de contrôle
Code source
Structures de données
Déclarations
Structures de contrôle
Fonctions usuelles
Outil de développement
Folklore
v ·m
Création
Structure
Comportement
Fonctionnel
Patron d'architecture
Autres patrons
Ce document provient de « https://fr.wikipedia.org/w/index.php?title=Fonction_de_rappel&oldid=211848823 ».
Catégories :
Catégories cachées :

[8]ページ先頭

©2009-2025 Movatter.jp