Fonction de rappel - Définition et Explications

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs est disponible ici.

En informatique, une fonction de rappel (callback en anglais) est une fonction 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 connait pas par avance.

Principe

La technique de la fonction de rappel (En informatique, une fonction de rappel (callback en anglais) est une fonction qui est passée en...) s'inspire du principe d'Hollywood 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

Prenons l'exemple d'un programme contenant une partie Analyseur effectuant par exemple l'analyse lexicale (L'analyse lexicale est la transformation d’un flot de caractères en un flot de lexèmes ou...) d'un document (Dans son acception courante un document est généralement défini comme le support physique d'une...). Supposons qu'une partie Traitement du programme, soit capable de compter les occurrences des mots qui lui sont transmis. Si Traitement 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 partie Analyseur ne gère pas spécifiquement le comptage des mots et ne dépend pas de Traitement. Elle peut donc être réutilisée pour une autre tâche comme le test de la présence de mots-clés.

Pseudo-code (En programmation, le pseudo-code est une façon de décrire un algorithme sans référence à un...) de l'Analyseur:

 
 // Variable (En mathématiques et en logique, une variable est représentée par un symbole. Elle...) de type fonction stockant la fonction de rappel 
 fonction(mot) traiterMot; 
 // Affectation (En algorithmique (informatique), une affectation est une opération qui permet d'attribuer une...) de la fonction de rappel 
 fixerFonctionTraitementMot(fonction(mot) f) { 
 traiterMot <- f; 
 } 
 // Corps de l'analyseur 
 analyse() { 
 ... 
 traiterMot(mot); 
 ... 
 } 
 

Pseudo-code du Traitement :

 
 // Définition (Une définition est un discours qui dit ce qu'est une chose ou ce que signifie un nom. D'où la...) de la fonction qui sera rappelée 
 nouvelleOccurrence(mot) { 
 ... 
 } 
 

Pseudo-code du programme principal :

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

Exemple

Nous recherchons le premier entier supérieur à 5. (en langage C)

La première approche sans fonction de rappel:

 
 int i; 
 for (i = 0; i < length; i++) 
 { 
 if (array[i] > 5) 
 { 
 break (Break est un mot anglais faisant référence à la notion de rupture (to break peut signifier...); 
 } 
 } 
 if (i < length) 
 { 
 printf("Item %d\n", i); 
 } 
 else 
 { 
 printf("Not found\n"); 
 } 
 

La seconde ( Seconde est le féminin de l'adjectif second, qui vient immédiatement après le premier ou qui...) avec fonction de rappel:

 
 /* LIBRARY CODE */ 
 int traverseWith(int array[], size_t length, 
 int (*callback)(int index, int item, void *param), 
 void *param) 
 { 
 int exitCode = 0; 
 for (int i = 0; i < length; i++) { 
 exitCode = callback(i, array[i], param); 
 if (exitCode != 0) { 
 break; 
 } 
 } 
 return exitCode; 
 } 
 /* APPLICATION CODE */ 
 int search (int index, int item, void *param) 
 { 
 if (item > 5) { 
 *(int *)param = index; 
 return 1; 
 } else { 
 return 0; 
 } 
 } 
 /* (in another function) */ 
 int index; 
 int found; 
 found = traverseWith(array, length, &search, &index); 
 if (found) { 
 printf("Item %d\n", index); 
 } else { 
 printf("Not found\n"); 
 } 
 

Mise en oeuvre par passage de fonctions en paramètre (Un paramètre est au sens large un élément d'information à prendre en compte...)

Les fonctions de rappel ont été très utilisées en programmation système (La programmation système est un type de programmation qui vise au développement de programmes qui...) et notamment en langage langage C. En effet, le C a permis assez tôt de passer (Le genre Passer a été créé par le zoologiste français Mathurin Jacques...) des pointeurs de fonctions en paramètre d'autres fonctions. Cela le rendait techniquement capable d'implanter le mécanisme des fonctions de rappel.

Notons que le passage de fonction en paramètre est généralisé en programmation fonctionnelle (Un langage fonctionnel est un langage de programmation dont la syntaxe et les caractéristiques...), toutefois dans ce cadre, on ne parle plus de fonction de rappel. En effet, dans ce paradigme, les fonctions sont des éléments de première classe (Dans un moyen de transport (avion, train ou bateau), la première classe est la classe la plus...) (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 de fonctions d'ordre supérieur.

Evolution du principe

Avec l'apparition de la programmation (La programmation dans le domaine informatique est l'ensemble des activités qui permettent...) objet (De manière générale, le mot objet (du latin objectum, 1361) désigne une entité définie dans...) et des interfaces, la technique de rappel a évolué. On passe maintenant en paramètre un objet qui se conforme à une interface (Une interface est une zone, réelle ou virtuelle qui sépare deux éléments. L’interface...) donnée (Dans les technologies de l'information, une donnée est une description élémentaire,...). 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 fonction de rappel continue à avoir les faveurs des langages disposant de fermetures, où celles-ci offrent des capacités équivalentes aux objets en terme de contexte (Le contexte d'un évènement inclut les circonstances et conditions qui l'entourent; le...).

Cet article vous a plu ? Partagez-le sur les réseaux sociaux avec vos amis !
Page générée en 0.030 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique