Recentemente, ouvi o termo "gancho" enquanto conversava com algumas pessoas sobre um programa que estava escrevendo. Não tenho certeza exatamente do que esse termo implica, embora tenha deduzido da conversa que gancho é um tipo de função. Procurei uma definição, mas não consegui encontrar uma boa resposta. Alguém poderia me dar uma idéia do que esse termo geralmente significa e talvez um pequeno exemplo para ilustrar a definição?
248
Respostas:
Essencialmente, é um lugar no código que permite que você toque em um módulo para fornecer um comportamento diferente ou reagir quando algo acontecer.
fonte
Um gancho é uma funcionalidade fornecida pelo software para que os usuários desse software tenham seu próprio código chamado em determinadas circunstâncias. Esse código pode aumentar ou substituir o código atual.
Antigamente, quando os computadores eram verdadeiramente pessoais e os vírus eram menos comuns (estou falando dos anos 80), era tão simples quanto aplicar o próprio software do sistema operacional para ligar para o seu código. Lembro-me de escrever uma extensão para a linguagem Applesoft BASIC no Apple II que simplesmente conectou meu código ao interpretador BASIC injetando uma chamada no meu código antes que qualquer linha fosse processada.
Alguns computadores tinham ganchos pré-projetados, um exemplo é o fluxo de E / S no Apple II. Ele usou esse gancho para injetar todo o subsistema de disco (as ROMs Apple II foram originalmente construídas nos dias em que os cassetes eram o principal meio de armazenamento dos PCs). Você controlava os discos imprimindo o código ASCII 4 (
CTRL-D
) seguido do comando que você queria executar, em seguidaCR
, a , e foi interceptado pelo subsistema do disco, que havia se ligado às rotinas de impressão da Apple ROM.Então, por exemplo, as linhas:
listaria o conteúdo do disco e reinicializaria a máquina. Isso permitiu truques como proteger seus programas BASIC, definindo a primeira linha como:
usando
POKE
para inserir oCTRL-D
caractere ondeX
estava. Então, qualquer um que tentar listar sua fonte enviaria a sequência de reinicialização através das rotinas de saída onde o subsistema de disco a detectaria.Esse é frequentemente o tipo de truque que tínhamos que recorrer, para obter o comportamento que queríamos.
Atualmente, com o sistema operacional mais seguro, ele oferece facilidades para ganchos, já que não é mais necessário modificar o sistema operacional "em voo" ou no disco.
Eles já existem há muito tempo. Os mainframes os possuíam (chamados de saídas) e uma grande quantidade de software de mainframe usa esses recursos até agora. Por exemplo, o sistema de controle de código-fonte gratuito que acompanha o z / OS (chamado SCLM) permite substituir completamente o subsistema de segurança simplesmente colocando seu próprio código na saída.
fonte
Em um sentido genérico, um "gancho" é algo que permitirá a você, um programador, visualizar e / ou interagir e / ou alterar algo que já está acontecendo em um sistema / programa.
Por exemplo, o Drupal CMS fornece aos desenvolvedores ganchos que permitem que eles executem ações adicionais após a criação de um "nó de conteúdo". Se um desenvolvedor não implementar um gancho, o nó será criado normalmente. Se um desenvolvedor implementar um gancho, ele poderá executar algum código adicional sempre que um nó for criado. Esse código pode fazer qualquer coisa, incluindo reverter e / ou alterar a ação original. Também poderia fazer algo não relacionado inteiramente à criação do nó.
Um retorno de chamada pode ser considerado como um tipo específico de gancho. Ao implementar a funcionalidade de retorno de chamada em um sistema, esse sistema permite que você chame algum código adicional após a conclusão de uma ação. No entanto, ligar (como um termo genérico) não se limita a retornos de chamada.
Outro exemplo. Às vezes, os desenvolvedores da Web se referem a nomes de classes e / ou IDs em elementos como ganchos. Isso porque, ao colocar o ID / nome da classe em um elemento, eles podem usar o Javascript para modificar esse elemento ou "conectar-se" ao documento da página. (isso está ampliando o significado, mas é comumente usado e vale a pena mencionar)
fonte
Simples disse:
Um gancho é um meio de executar código personalizado (função) antes, depois ou em vez do código existente. Por exemplo, uma função pode ser gravada para "conectar" ao processo de logon para executar uma função Captcha antes de continuar com o processo normal de logon.
fonte
Enganchar na programação é uma técnica que utiliza os chamados ganchos para fazer uma cadeia de procedimentos como manipulador de eventos.
fonte
Ganchos são uma categoria de função que permite que o código base chame o código de extensão. Isso pode ser útil em situações nas quais um desenvolvedor principal deseja oferecer extensibilidade sem expor seu código.
Um uso de ganchos está no desenvolvimento de mod de videogame. Um jogo pode não permitir que os desenvolvedores de mods estendam a funcionalidade básica, mas ganchos podem ser adicionados pelos desenvolvedores principais da biblioteca de mods. Com esses ganchos, desenvolvedores independentes podem ter seu código personalizado chamado para qualquer evento desejado, como carregamento de jogos, atualizações de inventário, interações entre entidades, etc.
Um método comum de implementação é fornecer a uma função uma lista vazia de retornos de chamada e expor a capacidade de estender a lista de retornos de chamada. O código base sempre chamará a função no mesmo momento e em tempo adequado, mas, com uma lista de retorno de chamada vazia, a função não fará nada. Isso ocorre por design.
Um terceiro, então, tem a oportunidade de escrever código adicional e adicionar seu novo retorno de chamada à lista de retorno de chamada do gancho. Com nada mais que uma referência dos ganchos disponíveis, eles estenderam a funcionalidade com risco mínimo ao sistema básico.
Hooks não permitem que os desenvolvedores façam algo que não possa ser feito com outras estruturas e interfaces. Eles são uma escolha a ser feita levando em consideração a tarefa e os usuários (desenvolvedores de terceiros).
Para esclarecimento: um gancho permite a extensão e pode ser implementado usando retornos de chamada. Os retornos de chamada geralmente não passam de um ponteiro de função; o endereço calculado de uma função. Parece haver confusão em outras respostas / comentários.
fonte
Hook indica um local no código em que você envia um evento de determinado tipo e, se esse evento foi registrado anteriormente com uma função adequada para retornar a chamada, ele seria tratado por essa função registrada, caso contrário, nada acontece.
fonte
ganchos podem ser executados quando alguma condição é encontrada. por exemplo, algumas mudanças de variáveis ou alguma ação é chamada ou algum evento acontece. ganchos podem entrar no processo e mudar as coisas ou reagir a mudanças.
fonte
Frequentemente, a conexão refere-se à conexão de mensagens do Win32 ou aos equivalentes Linux / OSX, mas a conexão mais genericamente é simplesmente notificar outro objeto / janela / programa / etc que você deseja que seja notificado quando uma ação especificada acontecer. Por exemplo: Todas as janelas do sistema notificam você quando estão prestes a fechar.
Como regra geral, enganchar é um tanto arriscado, pois fazê-lo sem entender como afeta o sistema pode levar à instabilidade ou ao comportamento inesperado. Também pode ser MUITO útil em determinadas circunstâncias, pensou. Por exemplo: o FRAPS o utiliza para determinar em quais janelas ele deve mostrar seu contador de FPS.
fonte
Uma cadeia de ganchos é um conjunto de funções em que cada função chama a próxima. O que é significativo em uma cadeia de ganchos é que um programador pode adicionar outra função à cadeia em tempo de execução. Uma maneira de fazer isso é procurar um local conhecido onde o endereço da primeira função em uma cadeia é mantido. Você salva o valor desse ponteiro de função e sobrescreve o valor no endereço inicial pelo endereço da função que deseja inserir na cadeia de ganchos. A função é chamada, faz seus negócios e chama a próxima função na cadeia (a menos que você decida de outra forma). Naturalmente, existem várias outras maneiras de criar uma cadeia de ganchos, desde a gravação direta na memória até o uso dos recursos de metaprogramação de linguagens como Ruby ou Python.
Um exemplo de uma cadeia de ganchos é a maneira como um aplicativo MS Windows processa mensagens. Cada função na cadeia de processamento processa uma mensagem ou a envia para a próxima função na cadeia.
fonte
No sistema de gerenciamento de conteúdo Drupal, 'gancho' tem um significado relativamente específico. Quando ocorre um evento interno (como criação de conteúdo ou login do usuário, por exemplo), os módulos podem responder ao evento implementando uma função especial "hook". Isso é feito através da convenção de nomenclatura - [your-plugin-name] _user_login () para o evento Login do Usuário, por exemplo.
Por causa dessa convenção, os eventos subjacentes são referidos como "ganchos" e aparecem com nomes como "hook_user_login" e "hook_user_authenticate ()" na documentação da API do Drupal.
fonte
Em MUITO curto, você pode alterar o código de uma chamada de API, como
MessageBox
para onde ele executa uma função diferente editada por você (globalmente funcionará em todo o sistema, localmente, em todo o processo).fonte