Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Fonction de rappel — Wikipédia
Fonction de rappel — Wikipédia 👆 Click Here! Read More..
Un article de Wikipédia, l'encyclopédie libre.
Page d’aide sur la paronymie

Cet article possède un paronyme, voir Callback.

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 article ne cite pas suffisamment ses sources (octobre 2014).

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 les références utiles à sa vé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 des projets correspondants.

En informatique, une fonction de rappel (callback en anglais) ou fonction de post-traitement 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 connaît pas par avance.

Principe

[modifier | modifier le code]

La technique de la fonction de rappel s'inspire du principe d'Hollywood (ou Inversion 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 partie Analyseur effectuant par exemple l'analyse lexicale d'un document. 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 de l'Analyseur :

// Variable de type fonction stockant la fonction de rappel
fonction(mot) traiterMot;

// Affectation de la fonction de rappel
fixerFonctionTraitementMot(fonction(mot) f) {
  traiterMot <- f;
}

// Corps de l'analyseur
analyse() {
  ...
  traiterMot(mot);
  ...
}

Pseudo-code du Traitement :

// Définition 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

[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. (en langage C).


La première approche sans fonction de rappel :

  int i;
  int length = 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 */
 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 œuvre par passage de fonctions en paramètre

[modifier | modifier le code]

Les fonctions de rappel ont été très utilisées en programmation système et notamment en langage C. En effet, le C a permis assez tôt de passer des pointeurs 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é en programmation 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 de fonctions d'ordre supérieur.

Évolution du principe

[modifier | modifier le code]

Avec l'apparition de la programmation objet et des interfaces, 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 de fermetures, où celles-ci offrent des capacités équivalentes aux objets en termes de contexte.

Voir aussi

[modifier | modifier le code]
  • Inversion de contrôle
v · m
Éléments de programmation informatique
Bibliothèque logicielle
  • Bibliothèque standard
  • Espace de noms
  • Framework
  • Gabarit
  • Interface
  • Interface de programmation (API)
Vocabulaire
  • Algorithme
  • Expression
  • Indentation
  • Instruction
  • Ligne de code
  • Opérateur
  • Pseudo-code
  • Ramasse-miettes
Fonctions
  • Dispatch multiple
  • Factorisation
  • Fonction imbriquée
  • Fonction de rappel
  • Fonction d'ordre supérieur
  • Fonction récursive
  • Généricité
  • Opérande
  • Paramètre
  • Polymorphisme
  • Procédure
  • Signature de type
  • Surcharge
Objet
  • Classe
  • Constructeur
  • Destructeur
  • Encapsulation
  • Héritage
  • Héritage multiple
  • Instance
  • Méthode
Événementiel Inversion de contrôle
Code source
Structures de données
  • Arbre
  • Enregistrement
  • Ensemble
  • File
  • Liste
  • Liste chaînée
  • Pile
  • Sémaphore
  • Tableau
  • Tas
  • Type abstrait
  • Vecteur
Déclarations
  • Affectation
  • Convention de nommage
  • Pointeur
  • Portée
  • Référence
  • Tableau associatif
  • Type énuméré
  • Type récursif
  • Typage statique
  • Variable
  • Variable globale
  • Variable locale
Structures de contrôle
  • Case
  • Eval
  • For
  • Goto
  • Switch
  • While
Fonctions usuelles
  • Concaténation
  • Incrémentation
  • malloc
  • printf
Outil de développement
  • Environnement de développement
  • Générateur de documentation
  • Gestion de versions
  • Modèle
  • Patch
  • Spécification
Folklore
  • Hello world
  • Principe KISS
  • Langage de programmation exotique
Catégories :
  • Programmation informatique
  • Développement logiciel
v · m
Patrons de conception
Création
  • Fabrique abstraite
  • Monteur
  • Fabrique
  • Prototype
  • Singleton
Structure
  • Adaptateur
  • Pont
  • Composite
  • Décorateur
  • Façade
  • Poids-mouche
  • Proxy
Comportement
  • Chaîne de responsabilité
  • Commande
  • Interpréteur
  • Itérateur
  • Médiateur
  • Mémento
  • Observateur
  • État
  • Stratégie
  • Patron de méthode
  • Visiteur
Fonctionnel
  • Fermeture
  • Curryfication
  • Composition de fonctions
  • Foncteur
  • Monade
  • Générateur
Patron d'architecture
  • ADR (en)
  • Active record
  • Broker (en)
  • Client-serveur
  • DAO
  • Data mapper
  • DTO
  • DDD
  • ECB
  • ECS (en)
  • EDA
  • Front controller (en)
  • Identity map (en)
  • Interceptor (en)
  • Implicit invocation (en)
  • Inversion de contrôle
  • Model 2 (en)
  • MOM
  • Microservices
  • MVA (en)
  • MVC
  • MVP
  • MVVM
  • Application monolithe
  • Architecture en couches
    • trois tiers
  • Naked objects (en)
  • Pair-à-pair
  • Publish-subscribe
  • PAC
  • POC
  • REST
  • SOA
  • Service locator (en)
  • SN (en)
  • SBA (en)
  • Specification (en)
Autres patrons
  • Modèle de Seeheim
  • Mémoïsation
  • Post-redirect-get
  • Support d'initialisation à la demande
  • Signaux et slots
  • Désignation chaînée
  • Double-checked locking
  • MapReduce
  • Reactor
  • Fonction de rappel
  • icône décorative Portail de la programmation informatique
Ce document provient de « https://fr.teknopedia.teknokrat.ac.id/w/index.php?title=Fonction_de_rappel&oldid=225530886 ».
Catégories :
  • Structure de contrôle
  • Programmation informatique
  • Patron de conception
Catégories cachées :
  • Article manquant de références depuis octobre 2014
  • Article manquant de références/Liste complète
  • Wikipédia:ébauche informatique
  • Article contenant un appel à traduction en anglais
  • Portail:Programmation informatique/Articles liés
  • Portail:Informatique/Articles liés

  • indonesia
  • Polski
  • الرية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصر
  • Nederlands
  • 本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українска
  • Tiếng Việt
  • Winaray
  • 中文
  • Русски
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id