Voy a hacer mi mejor esfuerzo para enmarcar esta pregunta de una manera que no resulte en una guerra de idiomas o una lista, porque creo que podría haber una buena respuesta técnica a esta pregunta.
Diferentes idiomas admiten alias de tipo en diversos grados. C # permite que los alias de tipo se declaren al comienzo de cada archivo de código, y solo son válidos en todo ese archivo. Los lenguajes como ML / Haskell usan alias de tipo probablemente tanto como usan las definiciones de tipo. C / C ++ son una especie de Salvaje Oeste, typedefy a #definemenudo se usan de manera intercambiable para tipos de alias.
Las ventajas del alias de tipo no invocan demasiada disputa:
- Hace que sea conveniente definir tipos compuestos que el lenguaje describe de forma natural, por ejemplo,
type Coordinate = float * floatotype String = [Char]. - Los nombres largos se pueden acortar:
using DSBA = System.Diagnostics.DebuggerStepBoundaryAttribute. - En lenguajes como ML o Haskell, donde los parámetros de función a menudo no tienen nombres, los alias de tipo proporcionan una apariencia de autodocumentación.
La desventaja es un poco más dudosa: los alias pueden proliferar, lo que dificulta la lectura y comprensión del código o el aprendizaje de una plataforma. La API Win32 es un buen ejemplo, con su DWORD = inty su HINSTANCE = HANDLE = void*y su LPHANDLE = HANDLE FAR*y tal. En todos estos casos, casi no tiene sentido distinguir entre un MANGO y un puntero vacío o un DWORD y un número entero, etc.
Dejando a un lado el debate filosófico de si un rey debería dar total libertad a sus súbditos y dejarlos ser responsables de sí mismos o si deberían intervenir todas sus acciones cuestionables, ¿podría haber un medio feliz que permitiera los beneficios del alias tipográfico mientras mitigar el riesgo de su abuso?
Como ejemplo, el problema de los nombres largos se puede resolver con buenas características de autocompletar. Visual Studio 2010, por ejemplo, le permitirá escribir DSBA para referir Intellisense a System.Diagnostics.DebuggerStepBoundaryAttribute. ¿Podría haber otras características que proporcionarían los otros beneficios del alias de tipo de forma más segura?
DebuggerStepBoundaryAttributees mucho más legible que DSBA. En el primer caso, sabes lo que significa. En el segundo, no tienes idea. Ahora imagine que usa veinte alias diferentes como este en el código. ¿Alguien tendría el coraje suficiente para tratar de leer y comprender su código?