Vou tentar o meu melhor para enquadrar essa questão de uma maneira que não resulte em uma guerra ou lista de idiomas, porque acho que poderia haver uma resposta técnica boa para essa pergunta.
Idiomas diferentes suportam aliases de tipo em graus variados. O C # permite que aliases de tipo sejam declarados no início de cada arquivo de código e são válidos apenas por todo esse arquivo. Idiomas como ML / Haskell usam aliases de tipo provavelmente tanto quanto usam definições de tipo. C / C ++ é uma espécie de oeste selvagem, typedefe #definefrequentemente é usado de forma aparentemente intercambiável para tipos de alias.
As vantagens do alias de tipo não invocam muita disputa:
- Torna conveniente definir tipos compostos que são descritos naturalmente pelo idioma, por exemplo,
type Coordinate = float * floatoutype String = [Char]. - Nomes longos pode ser encurtado:
using DSBA = System.Diagnostics.DebuggerStepBoundaryAttribute. - Em idiomas como ML ou Haskell, onde os parâmetros de função geralmente não têm nomes, os aliases de tipo fornecem uma aparência de auto-documentação.
A desvantagem é um pouco mais duvidosa: os aliases podem proliferar, dificultando a leitura e a compreensão do código ou o aprendizado de uma plataforma. A API do Win32 é um bom exemplo, com its DWORD = inte its HINSTANCE = HANDLE = void*e its LPHANDLE = HANDLE FAR*e such. Em todos esses casos, dificilmente faz sentido distinguir entre um HANDLE e um ponteiro nulo ou um DWORD e um número inteiro etc.
Deixando de lado o debate filosófico sobre se um rei deveria dar total liberdade a seus súditos e deixá-los serem responsáveis por si mesmos ou se deveriam ter todas as suas ações questionáveis interpostas, poderia haver um meio feliz que permitisse os benefícios do alias de tipo enquanto mitigar o risco de abuso?
Como exemplo, a questão dos nomes longos pode ser resolvida por bons recursos de preenchimento automático. O Visual Studio 2010, por exemplo, permitirá que você digite DSBA para consultar o Intellisense como System.Diagnostics.DebuggerStepBoundaryAttribute. Poderia haver outros recursos que forneceriam os outros benefícios do alias de tipo com mais segurança?
DebuggerStepBoundaryAttributeé muito mais legível do que DSBA. No primeiro caso, você sabe o que isso significa. No segundo, você não tem ideia. Agora imagine que você use vinte aliases diferentes como este no código. Alguém teria coragem suficiente para tentar ler e entender seu código?