J'ai récemment entendu le terme «crochet» en parlant à certaines personnes d'un programme que j'écrivais. Je ne sais pas exactement ce que ce terme implique, même si j'ai déduit de la conversation qu'un crochet est un type de fonction. J'ai cherché une définition mais je n'ai pas pu trouver une bonne réponse. Quelqu'un pourrait-il me donner une idée de ce que ce terme signifie généralement et peut-être un petit exemple pour illustrer la définition?
248
Réponses:
Il s'agit essentiellement d'un emplacement dans le code qui vous permet de vous connecter à un module pour fournir un comportement différent ou pour réagir lorsque quelque chose se produit.
la source
Un hook est une fonctionnalité fournie par un logiciel pour que les utilisateurs de ce logiciel aient leur propre code appelé dans certaines circonstances. Ce code peut augmenter ou remplacer le code actuel.
Dans les temps anciens où les ordinateurs étaient vraiment personnels et les virus moins répandus (je parle des années 80), c'était aussi simple que de patcher le logiciel du système d'exploitation lui-même pour appeler votre code. Je me souviens d'avoir écrit une extension du langage Applesoft BASIC sur l'Apple II qui a simplement accroché mon code à l'interpréteur BASIC en injectant un appel à mon code avant que la ligne ne soit traitée.
Certains ordinateurs avaient des crochets préconçus, un exemple étant le flux d'E / S sur l'Apple II. Il a utilisé un tel crochet pour injecter le sous-système de disque entier (les ROM Apple II ont été initialement construites à l'époque où les cassettes étaient le principal support de stockage pour les PC). Vous avez contrôlé les disques en imprimant le code ASCII 4 (
CTRL-D
) suivi de la commande que vous vouliez exécuter puis aCR
, et il a été intercepté par le sous-système de disque, qui s'était accroché aux routines d'impression Apple ROM.Ainsi, par exemple, les lignes:
répertorie le contenu du disque, puis réinitialise la machine. Cela a permis des astuces telles que la protection de vos programmes BASIC en définissant la première ligne comme:
puis en utilisant
POKE
pour insérer leCTRL-D
caractère à l'endroit où il seX
trouvait. Ensuite, toute personne essayant de répertorier votre source enverra la séquence de réinitialisation via les routines de sortie où le sous-système de disque la détectera.C'est souvent le genre de ruse à laquelle nous avons dû recourir pour obtenir le comportement que nous voulions.
De nos jours, avec le système d'exploitation plus sécurisé, il fournit des installations pour les hooks lui-même, puisque vous n'êtes plus censé modifier le système d'exploitation "en vol" ou sur le disque.
Ils existent depuis longtemps . Les mainframes en avaient (appelés sorties) et de nombreux logiciels mainframe utilisent ces installations même maintenant. Par exemple, le système de contrôle de code source gratuit fourni avec z / OS (appelé SCLM) vous permet de remplacer entièrement le sous-système de sécurité en plaçant simplement votre propre code à la sortie.
la source
Dans un sens générique, un "hook" est quelque chose qui vous permettra, en tant que programmeur, de voir et / ou d'interagir avec et / ou de changer quelque chose qui se passe déjà dans un système / programme.
Par exemple, le CMS Drupal fournit aux développeurs des crochets qui leur permettent de prendre des mesures supplémentaires après la création d'un "nœud de contenu". Si un développeur n'implémente pas de hook, le nœud est créé normalement. Si un développeur implémente un hook, il peut faire exécuter du code supplémentaire chaque fois qu'un nœud est créé. Ce code pourrait faire n'importe quoi, y compris annuler et / ou modifier l'action d'origine. Il pourrait également faire quelque chose de complètement étranger à la création de nœud.
Un rappel pourrait être considéré comme un type spécifique de crochet. En implémentant la fonctionnalité de rappel dans un système, ce système vous permet d'appeler du code supplémentaire une fois l'action terminée. Cependant, le raccordement (en tant que terme générique) n'est pas limité aux rappels.
Un autre exemple. Parfois, les développeurs Web font référence aux noms de classe et / ou aux identifiants sur les éléments comme des crochets. En effet, en plaçant l'ID / le nom de classe sur un élément, ils peuvent ensuite utiliser Javascript pour modifier cet élément, ou «se connecter» au document de la page. (cela étire le sens, mais il est couramment utilisé et mérite d'être mentionné)
la source
Simple dit:
Un hook est un moyen d'exécuter du code personnalisé (fonction) avant, après ou à la place du code existant. Par exemple, une fonction peut être écrite pour "accrocher" dans le processus de connexion afin d'exécuter une fonction Captcha avant de passer au processus de connexion normal.
la source
Le hooking en programmation est une technique qui utilise des soi-disant hooks pour créer une chaîne de procédures en tant que gestionnaire d'événements.
la source
Les crochets sont une catégorie de fonction qui permet au code de base d'appeler le code d'extension. Cela peut être utile dans les situations où un développeur principal souhaite offrir une extensibilité sans exposer son code.
Une utilisation des crochets est dans le développement de mod de jeux vidéo. Un jeu peut ne pas permettre aux développeurs de mod d'étendre les fonctionnalités de base, mais des crochets peuvent être ajoutés par les développeurs principaux de la bibliothèque de mod. Avec ces crochets, les développeurs indépendants peuvent faire appeler leur code personnalisé à tout événement souhaité, tel que le chargement du jeu, les mises à jour d'inventaire, les interactions d'entité, etc.
Une méthode d'implémentation courante consiste à attribuer à une fonction une liste vide de rappels, puis à exposer la possibilité d'étendre la liste de rappels. Le code de base appellera toujours la fonction en même temps, mais avec une liste de rappel vide, la fonction ne fait rien. C'est par conception.
Un tiers a alors la possibilité d'écrire du code supplémentaire et d'ajouter son nouveau rappel à la liste de rappel du hook. Avec rien de plus qu'une référence de crochets disponibles, ils ont des fonctionnalités étendues avec un risque minimal pour le système de base.
Les crochets ne permettent pas aux développeurs de faire quoi que ce soit qui ne peut pas être fait avec d'autres structures et interfaces. Ils sont un choix à faire en tenant compte de la tâche et des utilisateurs (développeurs tiers).
Pour plus de précision: un hook permet l'extension et peut être implémenté à l'aide de rappels. Les rappels ne sont généralement rien de plus qu'un pointeur de fonction; l'adresse calculée d'une fonction. Il semble y avoir confusion dans les autres réponses / commentaires.
la source
Hook indique un endroit dans le code où vous distribuez un événement d'un certain type, et si cet événement a été enregistré auparavant avec une fonction appropriée à rappeler, alors il serait géré par cette fonction enregistrée, sinon rien ne se produit.
la source
les hooks peuvent être exécutés lorsqu'une condition est rencontrée. par exemple, certains changements de variables ou une action est appelée ou un événement se produit. les crochets peuvent entrer dans le processus et changer les choses ou réagir aux changements.
la source
Souvent, le raccordement fait référence au raccordement de messages Win32 ou aux équivalents Linux / OSX, mais de manière plus générique, il suffit de notifier un autre objet / fenêtre / programme / etc que vous souhaitez être averti lorsqu'une action spécifiée se produit. Par exemple: toutes les fenêtres du système vous avertissent lorsqu'elles sont sur le point de se fermer.
En règle générale, le raccordement est quelque peu dangereux, car le faire sans comprendre comment il affecte le système peut entraîner une instabilité ou, à tout le moins, un comportement inattendu. Il peut également être TRÈS utile dans certaines circonstances, pensait-il. Par exemple: FRAPS l' utilise pour déterminer sur quelles fenêtres il doit afficher son compteur FPS.
la source
Une chaîne de crochets est un ensemble de fonctions dans lesquelles chaque fonction appelle la suivante. Ce qui est important à propos d'une chaîne de crochets, c'est qu'un programmeur peut ajouter une autre fonction à la chaîne au moment de l'exécution. Une façon de procéder consiste à rechercher un emplacement connu où l'adresse de la première fonction d'une chaîne est conservée. Vous enregistrez ensuite la valeur de ce pointeur de fonction et écrasez la valeur à l'adresse initiale par l'adresse de la fonction que vous souhaitez insérer dans la chaîne de crochet. La fonction est ensuite appelée, fait son travail et appelle la fonction suivante de la chaîne (sauf si vous en décidez autrement). Naturellement, il existe un certain nombre d'autres façons de créer une chaîne de crochets, de l'écriture directement dans la mémoire à l'utilisation des fonctionnalités de métaprogrammation de langages comme Ruby ou Python.
Un exemple de chaîne de crochets est la manière dont une application MS Windows traite les messages. Chaque fonction de la chaîne de traitement traite un message ou l'envoie à la fonction suivante de la chaîne.
la source
Dans le système de gestion de contenu Drupal, «hook» a une signification relativement spécifique. Lorsqu'un événement interne se produit (comme la création de contenu ou la connexion utilisateur, par exemple), les modules peuvent répondre à l'événement en implémentant une fonction "hook" spéciale. Cela se fait via la convention de dénomination - [your-plugin-name] _user_login () pour l'événement User Login, par exemple.
En raison de cette convention, les événements sous-jacents sont appelés «hooks» et apparaissent avec des noms comme «hook_user_login» et «hook_user_authenticate ()» dans la documentation de l'API Drupal.
la source
En TRÈS court, vous pouvez changer le code d'un appel d'API tel que l'
MessageBox
endroit où il fait une fonction différente éditée par vous (globalement fonctionnera à l'échelle du système, localement fonctionnera à l'échelle du processus).la source