Je vais faire de mon mieux pour formuler cette question d'une manière qui n'entraîne pas une guerre linguistique ou une liste, car je pense qu'il pourrait y avoir une bonne réponse technique à cette question.
Différentes langues prennent en charge les alias de type à des degrés divers. C # permet de déclarer des alias de type au début de chaque fichier de code, et ils ne sont valables que dans l'ensemble de ce fichier. Des langages comme ML / Haskell utilisent probablement des alias de type autant qu'ils utilisent des définitions de type. C / C ++ est une sorte de Far West, typedef
et #define
souvent utilisé de manière interchangeable pour les types d'alias.
Les avantages de l'alias de type n'invoquent pas trop de litige:
- Il facilite la définition de types composites qui sont décrits naturellement par le langage, par exemple
type Coordinate = float * float
outype String = [Char]
. - Peuvent être raccourcies noms longs:
using DSBA = System.Diagnostics.DebuggerStepBoundaryAttribute
. - Dans des langages comme ML ou Haskell, où les paramètres de fonction n'ont souvent pas de nom, les alias de type fournissent un semblant d'auto-documentation.
L'inconvénient est un peu plus incertain: les alias peuvent proliférer, ce qui rend difficile la lecture et la compréhension du code ou l'apprentissage d'une plate-forme. L'API Win32 est un bon exemple, avec son DWORD = int
et son HINSTANCE = HANDLE = void*
et son LPHANDLE = HANDLE FAR*
et tel. Dans tous ces cas, il est à peine logique de faire la distinction entre un HANDLE et un pointeur vide ou un DWORD et un entier, etc.
En laissant de côté le débat philosophique sur la question de savoir si un roi devrait donner une liberté totale à ses sujets et les laisser être responsables d'eux-mêmes ou s'ils devraient faire intervenir toutes leurs actions douteuses, pourrait-il y avoir un juste milieu qui permettrait les avantages de l'alias de type tout en atténuer le risque d'abus?
Par exemple, le problème des noms longs peut être résolu par de bonnes fonctionnalités de saisie semi-automatique. Visual Studio 2010, par exemple, vous permettra de taper DSBA afin de référencer Intellisense à System.Diagnostics.DebuggerStepBoundaryAttribute. Pourrait-il y avoir d'autres fonctionnalités qui offriraient les autres avantages de l'alias de type de manière plus sûre?
DebuggerStepBoundaryAttribute
est beaucoup plus lisible que DSBA
. Dans le premier cas, vous savez ce que cela signifie. Dans le second, vous n'en avez aucune idée. Imaginez maintenant que vous utilisez vingt alias différents comme celui-ci dans le code. Quelqu'un aurait-il assez de courage pour essayer de lire et de comprendre votre code?