Pour ce tutoriel, tout ce qui vous sera demandé ce sont des bases en algorithmie et en développement (appel de fonction, valeur de retour). Ici on traite d’un concept de programmation, pas besoin d’outils ni de langage en particulier !
Une fonction callback, qu’est-ce que c’est ?
Comme son nom l’indique une fonction de Callback est une fonction de rappel. C’est-à-dire qu’il s’agit d’une fonction qui est passée en paramètre à une autre fonction. Afin que cette dernière puisse en faire usage.
Ce n’est peut-être pas assez clair pour tout le monde donc nous allons illustrer tout ça : imaginez une fonction A et une fonction B, lorsque l’on va appeler la fonction A, on va lui passer en paramètre la fonction B de cette manière A(B), comme si on lui passait une variable. Lorsque A s’exécutera elle pourra alors exécuter la fonction B.
Ça y est ? C’est mieux là ?
Bon et bien c’est là que réside toute la puissance des fonctions de Callback ! En effet de cette manière il est possible de faire exécuter du code « dynamiquement », sans savoir ce qu’il va faire mais en suivant une « interface de programmation » qui définira :
- Le nombre et le type des paramètres en entrée
- Le type de la valeur en sortie
Illustration de l’utilisation des fonctions de callback
Pour formater une liste d’éléments
Pour notre premier exemple nous allons imaginer un système de liste générique qui puisse être utilisé pour générer des tableaux dans une interface d’administration. Générer le tableau n’est pas complexe en soi, il suffit de boucler sur les résultats, cependant comment afficher les données telles qu’elles sont enregistrées en base ? Assurément pas, je doute que l’utilisateur soit friand de timestamp et de valeurs booléennes.
À l’aide de fonctions prédéfinies ? Pourquoi pas, mais dans ce cas il faudra penser à tous les cas de figure si on veut remplir les attentes du développeurs. Alors comment faire pour offrir un outil gérant à la fois la généricité (afficher une liste de données) et la spécificité (traiter correctement les données avant affichage) ?
Des éléments de réponses pourraient très certainement se trouver dans la programmation orientée objet mais dans ce cas notre outil souffrira d’une lourdeur de mise en œuvre pour pouvoir paramétrer et adapter chaque objet à la liste que l’on souhaite mettre en place. Les fonctions de callback sont une réponse simple à cette problématique.
Pour mettre en œuvre cela il va falloir définir une interface de programmation ; nous allons par exemple décider que notre fonction de callback recevra en paramètre la valeur de la colonne et qu’en sortie elle retournera la valeur à afficher. Voici ce qu’une fonction ayant la charge de remplacer des « Y » par des « Yes » et des « N » par des « No » pourrait donner en PHP :
1.function displayData($data) {
2.if($data == 'Y')
3.return 'Yes';
4.return 'No';
5.}
Enfantin n’est-ce pas ?
En appliquant ce principe aux différents types de données se trouvant dans la base il sera possible de personnaliser l’affichage à l’infini, selon les souhaits du développeur. Et si vous souhaitez afficher « Oui » au lieu de « Yes » rien de plus simple. Nous n’entrerons pas plus loin dans le détail de la mise en œuvre technique d’une fonction de callback en PHP.
Pour traiter le résultat d’une fonction exécutée en différé
Tout comme le Bourgeois gentilhomme parlait en prose sans même le savoir, il se peut que vous ayez déjà utilisé des fonctions de callback sans vous en apercevoir. Et oui !
Et en disant ça nous pensons notamment aux frameworks Javascript (jQuery, Mootools, Scriptaculous, etc.) qui utilisent pléthore de fonctions de callback.
Prenons par exemple la fonction $.ajax de jQuery, parmi les options que peut recevoir cette fonction, on découvre celles-ci : beforeSend, complete, dataFilter, error ou encore success. Ces options ne sont autres que des fonctions de callback que jQuery appellera au moment venu pour traiter vos données.
La fonction complete sera appelée une fois votre requête Ajax terminée. On retrouve donc ici le principe que nous explosions en introduction, une fonction de callback doit suivre une interface de programmation, dans le cas de la fonction complète, celle-ci doit recevoir en paramètre un objet XMLHttpRequest et un textStatus, libre à vous de déterminer le comportement devant être exécuté au retour de la requête Ajax.
Pour aller plus loin
Nous espérons avec cet article d’introduction vous avoir sensibilisé au concept de fonction de callback. Cet article constitue un prélude à d’autres articles, qui vous expliqueront comment les mettre en œuvre dans les langages PHP et Javascript.