Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Alain Ketterlin
Mihamina Rakotomandimby writes:
Dans Emacs et certains exemples de code dans divers langage que j'ai rencontré, je vois des "hook". Qu'est-ce que c'est que les "hook"?
Ca veut dire crochet, ça permet de d'indiquer des fonctions qui seront appelées par une autre fonction (tu accroches des fonctions à la fonction cible). Par exemple, find-file-hook contient une liste de fonctions appelées après que find-file a fait son travail.
Bien sûr, les détails de l'utilisation dépendent de ce que le langage utilisé appelle une "fonction". En Lisp (et dans les langages fonctionnels en général), c'est facile d'utiliser des fonctions comme des variables, voire d'en créer à la volée etc. Dans d'autres langages, c'est plus ou moins facile : par exemple, en Java, tu as un mécanisme similaire dans Swing, mais ça s'appelle des listeners, et ce sont des objets implémentant une certaine interface, c'est-à-dire définissant une certaine méthode qui sera appelée au moment de l'activation du "hook" (l'appel de la dite méthode sur chaque listener). Si jamais le hook a besoin de données (hors celle transmise par le protocole d'appel), en Java tu les mettrais dans l'objet listener, en Lisp and co. tu utiliserais une fermeture ("closure").
-- Alain.
P/S: j'ignore le follow-up parce que mon serveur ne connait pas fr.comp.developpement
Dans Emacs et certains exemples de code dans divers langage que j'ai
rencontré, je vois des "hook".
Qu'est-ce que c'est que les "hook"?
Ca veut dire crochet, ça permet de d'indiquer des fonctions qui seront
appelées par une autre fonction (tu accroches des fonctions à la
fonction cible). Par exemple, find-file-hook contient une liste de
fonctions appelées après que find-file a fait son travail.
Bien sûr, les détails de l'utilisation dépendent de ce que le langage
utilisé appelle une "fonction". En Lisp (et dans les langages
fonctionnels en général), c'est facile d'utiliser des fonctions comme
des variables, voire d'en créer à la volée etc. Dans d'autres
langages, c'est plus ou moins facile : par exemple, en Java, tu as un
mécanisme similaire dans Swing, mais ça s'appelle des listeners, et ce
sont des objets implémentant une certaine interface, c'est-à-dire
définissant une certaine méthode qui sera appelée au moment de
l'activation du "hook" (l'appel de la dite méthode sur chaque
listener). Si jamais le hook a besoin de données (hors celle transmise
par le protocole d'appel), en Java tu les mettrais dans l'objet
listener, en Lisp and co. tu utiliserais une fermeture ("closure").
-- Alain.
P/S: j'ignore le follow-up parce que mon serveur ne connait pas
fr.comp.developpement
Dans Emacs et certains exemples de code dans divers langage que j'ai rencontré, je vois des "hook". Qu'est-ce que c'est que les "hook"?
Ca veut dire crochet, ça permet de d'indiquer des fonctions qui seront appelées par une autre fonction (tu accroches des fonctions à la fonction cible). Par exemple, find-file-hook contient une liste de fonctions appelées après que find-file a fait son travail.
Bien sûr, les détails de l'utilisation dépendent de ce que le langage utilisé appelle une "fonction". En Lisp (et dans les langages fonctionnels en général), c'est facile d'utiliser des fonctions comme des variables, voire d'en créer à la volée etc. Dans d'autres langages, c'est plus ou moins facile : par exemple, en Java, tu as un mécanisme similaire dans Swing, mais ça s'appelle des listeners, et ce sont des objets implémentant une certaine interface, c'est-à-dire définissant une certaine méthode qui sera appelée au moment de l'activation du "hook" (l'appel de la dite méthode sur chaque listener). Si jamais le hook a besoin de données (hors celle transmise par le protocole d'appel), en Java tu les mettrais dans l'objet listener, en Lisp and co. tu utiliserais une fermeture ("closure").
-- Alain.
P/S: j'ignore le follow-up parce que mon serveur ne connait pas fr.comp.developpement