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.
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.
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.
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();
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");}
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.
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.
Éléments deprogrammation informatique | |||||||||
---|---|---|---|---|---|---|---|---|---|
Bibliothèque logicielle | |||||||||
Vocabulaire |
| ||||||||
Code source |
| ||||||||
Outil de développement | |||||||||
Folklore | |||||||||
Catégories : |