Farò del mio meglio per inquadrare questa domanda in modo da non provocare una guerra o un elenco linguistico, perché penso che potrebbe esserci una buona risposta tecnica a questa domanda.
Lingue diverse supportano alias di tipo a vari livelli. C # consente di dichiarare gli alias di tipo all'inizio di ciascun file di codice e sono validi solo in tutto il file. Lingue come ML / Haskell usano alias di tipo probabilmente tanto quanto usano definizioni di tipo. C / C ++ sono una specie di selvaggio West, typedef
e #define
spesso vengono usati in modo intercambiabile con i tipi di alias.
Gli aspetti positivi dell'aliasing di tipo non invocano troppe controversie:
- Si rende conveniente definire tipi compositi descritti naturalmente dal linguaggio, ad esempio
type Coordinate = float * float
otype String = [Char]
. - I nomi lunghi possono essere accorciati:
using DSBA = System.Diagnostics.DebuggerStepBoundaryAttribute
. - In linguaggi come ML o Haskell, dove i parametri di funzione spesso non hanno nomi, gli alias di tipo forniscono una parvenza di autocertificazione.
L'aspetto negativo è un po 'più incerto: gli alias possono proliferare, rendendo difficile la lettura e la comprensione del codice o l'apprendimento di una piattaforma. L'API Win32 è un buon esempio, con suo DWORD = int
e suo HINSTANCE = HANDLE = void*
e suo LPHANDLE = HANDLE FAR*
e tale. In tutti questi casi non ha senso distinguere tra una MANIGLIA e un puntatore vuoto o un DWORD e un numero intero ecc.
Mettendo da parte il dibattito filosofico sul fatto che un re dovrebbe dare completa libertà ai propri sudditi e lasciarli essere responsabili di se stessi o se dovrebbero intervenire tutte le loro azioni discutibili, potrebbe esserci un mezzo felice che consentirebbe i benefici dell'aliasing di tipo mentre mitigare il rischio del suo abuso?
Ad esempio, il problema dei nomi lunghi può essere risolto con buone funzionalità di completamento automatico. Visual Studio 2010, ad esempio, ti consentirà di digitare DSBA per riferire Intellisense a System.Diagnostics.DebuggerStepBoundaryAttribute. Potrebbero esserci altre funzionalità che offrirebbero gli altri benefici dell'aliasing di tipo in modo più sicuro?
DebuggerStepBoundaryAttribute
è molto più leggibile di DSBA
. Nel primo caso, sai cosa significa. Nel secondo, non ne hai idea. Ora immagina di usare venti alias diversi come questo nel codice. Qualcuno avrebbe abbastanza coraggio per provare a leggere e comprendere il tuo codice?