En programmation, quelle est la différence entre un handle et un handler ?


Un handle (comme le manche d'un balai ou d'un tournevis) est un moyen pratique de tenir un objet plus complexe.

Donc, par exemple, en graphisme - nous pourrions charger une certaine image, lui donner un tas de propriétés compliquées - puis la remettre au système graphique pour qu'il la gère. En retour, le système graphique nous donne un "handle" qui correspond à cette image - qui est probablement soit un pointeur, soit un entier simple - que nous pouvons utiliser pour parler de cette image à l'avenir.


C'est très pratique quand une bibliothèque prend le contrôle d'un objet - et que vous ne voulez pas que le créateur original puisse faire quoi que ce soit à l'objet sans passer par l'interface officielle des bibliothèques.

On dit que les manettes sont des "objets opaques" - vous n'avez aucune idée de ce qu'elles contiennent ou de quoi que ce soit à leur sujet - sauf qu'elles existent, que vous pouvez les copier librement - et que vous pouvez les faire passer dans cette bibliothèque.

Les manettes sont presque toujours de très petits objets.

Un manipulateur (comme un bagagiste dans un aéroport) - est un logiciel qui rend un service pour vous. Ainsi, vous pourriez parler d'un "File handler" - qui effectue tout le travail fastidieux de traitement des fichiers sur le disque.

Il n'est pas rare qu'un handler vous donne un handle - mais les deux termes ne sont PAS liés de manière particulière - il se trouve simplement qu'il est assez courant que les handlers le fassent.

Pour prendre l'exemple le plus simple - la bibliothèque standard du langage C.

Lorsque vous appelez "fopen" pour ouvrir un fichier - il vous renvoie un "FILE*" - qui est un handle. Vous ne pouvez rien faire avec l'objet FILE* qu'il vous a donné - il n'y a aucune donnée utile à l'intérieur de l'objet vers lequel il pointe que vous pouvez utiliser en toute sécurité. En fait, il se peut qu'il ne pointe pas du tout vers quelque chose de valide.

Mais lorsque vous voulez lire le fichier (en utilisant 'fread', par exemple) - vous présentez à cette fonction l'handle de votre fichier - et elle sait quoi en faire. Lorsque vous en avez terminé avec le fichier, vous passez le handle à "fclose" et à partir de ce moment, votre handle est inutile.

Dans ce cas, le "FILE*" est un handle et la bibliothèque d'E/S standard est le "handler".