Recientemente escuché el término "enganchar" mientras hablaba con algunas personas sobre un programa que estaba escribiendo. No estoy seguro de lo que implica exactamente este término, aunque deduje de la conversación que un gancho es un tipo de función. Busqué una definición pero no pude encontrar una buena respuesta. ¿Alguien podría darme una idea de lo que significa generalmente este término y quizás un pequeño ejemplo para ilustrar la definición?
248
Respuestas:
Esencialmente, es un lugar en el código que le permite acceder a un módulo para proporcionar un comportamiento diferente o reaccionar cuando algo sucede.
fuente
Un enlace es la funcionalidad proporcionada por el software para que los usuarios de ese software tengan su propio código llamado bajo ciertas circunstancias. Ese código puede aumentar o reemplazar el código actual.
En los viejos tiempos, cuando las computadoras eran realmente personales y los virus eran menos frecuentes (estoy hablando de los años 80), era tan simple como parchear el software del sistema operativo para llamar a su código. Recuerdo haber escrito una extensión al lenguaje BASIC de Applesoft en el Apple II que simplemente conectó mi código al intérprete BASIC inyectando una llamada a mi código antes de que se procesara cualquiera de las líneas.
Algunas computadoras tenían ganchos prediseñados, un ejemplo es la transmisión de E / S en el Apple II. Utilizó dicho gancho para inyectar todo el subsistema del disco (las ROM de Apple II se construyeron originalmente en los días en que los casetes eran el medio de almacenamiento principal para las PC). Usted controló los discos imprimiendo el código ASCII 4 (
CTRL-D
) seguido del comando que deseaba ejecutar luego aCR
, y fue interceptado por el subsistema de disco, que se había enganchado en las rutinas de impresión ROM de Apple.Entonces, por ejemplo, las líneas:
enumeraría el contenido del disco y luego reinicializaría la máquina. Esto permitió trucos como proteger sus programas BASIC configurando la primera línea como:
luego usando
POKE
para insertar elCTRL-D
personaje en dondeX
estaba. Entonces, cualquiera que intente enumerar su fuente enviará la secuencia de reinicialización a través de las rutinas de salida donde el subsistema de disco la detectaría.Ese es a menudo el tipo de truco al que tuvimos que recurrir para obtener el comportamiento que queríamos.
Hoy en día, con el sistema operativo más seguro, proporciona facilidades para los ganchos, ya que ya no se supone que modifique el sistema operativo "en vuelo" o en el disco.
Han existido por mucho tiempo. Los mainframes los tenían (llamados salidas) y una gran cantidad de software de mainframe usa esas instalaciones incluso ahora. Por ejemplo, el sistema de control de código fuente gratuito que viene con z / OS (llamado SCLM) le permite reemplazar completamente el subsistema de seguridad simplemente colocando su propio código en la salida.
fuente
En un sentido genérico, un "gancho" es algo que le permitirá a usted, un programador, ver y / o interactuar y / o cambiar algo que ya está sucediendo en un sistema / programa.
Por ejemplo, el Drupal CMS proporciona a los desarrolladores ganchos que les permiten tomar medidas adicionales después de crear un "nodo de contenido". Si un desarrollador no implementa un enlace, el nodo se crea de forma normal. Si un desarrollador implementa un enlace, puede ejecutar un código adicional cada vez que se crea un nodo. Este código podría hacer cualquier cosa, incluyendo retroceder y / o alterar la acción original. También podría hacer algo no relacionado con la creación del nodo por completo.
Una devolución de llamada podría considerarse como un tipo específico de gancho. Al implementar la funcionalidad de devolución de llamada en un sistema, ese sistema le permite llamar a un código adicional después de que se haya completado una acción. Sin embargo, el enganche (como término genérico) no se limita a las devoluciones de llamada.
Otro ejemplo. A veces, los desarrolladores web se referirán a los nombres de clase y / o ID de elementos como ganchos. Esto se debe a que al colocar el nombre de ID / clase en un elemento, pueden usar Javascript para modificar ese elemento o "engancharse" al documento de la página. (Esto está ampliando el significado, pero se usa comúnmente y vale la pena mencionarlo)
fuente
Simple dijo:
Un enlace es un medio de ejecutar código personalizado (función) antes, después o en lugar del código existente. Por ejemplo, se puede escribir una función para "enganchar" en el proceso de inicio de sesión para ejecutar una función Captcha antes de continuar con el proceso normal de inicio de sesión.
fuente
Enganchar en la programación es una técnica que emplea los llamados ganchos para hacer una cadena de procedimientos como un controlador de eventos.
fuente
Los ganchos son una categoría de función que permite que el código base llame al código de extensión. Esto puede ser útil en situaciones en las que un desarrollador principal quiere ofrecer extensibilidad sin exponer su código.
Un uso de ganchos es en el desarrollo de mods de videojuegos. Un juego puede no permitir a los desarrolladores de mods extender la funcionalidad básica, pero los desarrolladores de la biblioteca de mods pueden agregar ganchos. Con estos ganchos, los desarrolladores independientes pueden tener su código personalizado invocado en cualquier evento deseado, como la carga del juego, actualizaciones de inventario, interacciones de la entidad, etc.
Un método común de implementación es dar a una función una lista vacía de devoluciones de llamada, luego exponer la capacidad de extender la lista de devoluciones de llamada. El código base siempre llamará a la función al mismo tiempo, pero, con una lista de devolución de llamada vacía, la función no hace nada. Esto es por diseño.
Un tercero, entonces, tiene la oportunidad de escribir código adicional y agregar su nueva devolución de llamada a la lista de devolución de llamada del enlace. Con nada más que una referencia de ganchos disponibles, tienen una funcionalidad extendida con un riesgo mínimo para el sistema base.
Los ganchos no permiten a los desarrolladores hacer nada que no se pueda hacer con otras estructuras e interfaces. Son una elección a tener en cuenta para la tarea y los usuarios (desarrolladores de terceros).
Para aclarar: un enlace permite la extensión y puede implementarse mediante devoluciones de llamada. Las devoluciones de llamada generalmente no son más que un puntero de función; La dirección calculada de una función. Parece haber confusión en otras respuestas / comentarios.
fuente
Hook denota un lugar en el código donde se despacha un evento de cierto tipo, y si este evento se registró antes con una función adecuada para devolver la llamada, entonces sería manejado por esta función registrada, de lo contrario no sucede nada.
fuente
los ganchos se pueden ejecutar cuando se encuentra alguna condición. por ejemplo, algunos cambios de variables o alguna acción se llama o sucede algún evento. Los ganchos pueden entrar en el proceso y cambiar las cosas o reaccionar ante los cambios.
fuente
A menudo, el enlace se refiere al enlace de mensajes Win32 o los equivalentes de Linux / OSX, pero el enlace más genérico es simplemente notificar a otro objeto / ventana / programa / etc. que desea que se le notifique cuando ocurre una acción específica. Por ejemplo: hacer que todas las ventanas del sistema le notifiquen cuando están a punto de cerrarse.
Como regla general, el enganche es algo peligroso, ya que hacerlo sin comprender cómo afecta al sistema puede provocar inestabilidad o, al menos, un comportamiento inesperado. También puede ser MUY útil en ciertas circunstancias, pensó. Por ejemplo: FRAPS lo usa para determinar en qué ventanas debe mostrar su contador FPS.
fuente
Una cadena de ganchos es un conjunto de funciones en el que cada función llama a la siguiente. Lo importante de una cadena de ganchos es que un programador puede agregar otra función a la cadena en tiempo de ejecución. Una forma de hacerlo es buscar una ubicación conocida donde se mantenga la dirección de la primera función en una cadena. Luego guarda el valor del puntero de esa función y sobrescribe el valor en la dirección inicial con la dirección de la función que desea insertar en la cadena de enlace. Luego se llama a la función, hace su trabajo y llama a la siguiente función de la cadena (a menos que usted decida lo contrario). Naturalmente, hay varias otras formas de crear una cadena de ganchos, desde escribir directamente en la memoria hasta usar las funciones de metaprogramación de lenguajes como Ruby o Python.
Un ejemplo de una cadena de ganchos es la forma en que una aplicación de MS Windows procesa los mensajes. Cada función en la cadena de procesamiento procesa un mensaje o lo envía a la siguiente función en la cadena.
fuente
En el sistema de gestión de contenido de Drupal, "gancho" tiene un significado relativamente específico. Cuando ocurre un evento interno (como la creación de contenido o el inicio de sesión del usuario, por ejemplo), los módulos pueden responder al evento implementando una función especial de "enlace". Esto se realiza mediante una convención de nomenclatura: [your-plugin-name] _user_login () para el evento de inicio de sesión de usuario, por ejemplo.
Debido a esta convención, los eventos subyacentes se denominan "ganchos" y aparecen con nombres como "hook_user_login" y "hook_user_authenticate ()" en la documentación de la API de Drupal.
fuente
En resumen, puede cambiar el código de una llamada a la API, por ejemplo,
MessageBox
dónde realiza una función diferente editada por usted (globalmente funcionará en todo el sistema, localmente en todo el proceso).fuente