Pensieri su tipo alias / sinonimi?

10

Cercherò di fare del mio meglio per inquadrare questa domanda in un modo che non sfoci in una guerra o lista linguistica, perché penso che ci potrebbe essere una buona risposta tecnica a questa domanda.

Diverse lingue supportano l'alias di tipi a vari livelli. C # consente di dichiarare alias di tipo all'inizio di ogni file di codice e sono validi solo per quel file. Lingue come ML / Haskell usano alias di tipo probabilmente tanto quanto usano definizioni di tipo. C / C ++ sono una sorta di Wild West, con typedef e #define spesso usati in modo apparentemente intercambiabile con i tipi di alias.

I lati positivi del tipo aliasing non invocano troppe controversie:

  • Rende conveniente definire tipi compositi descritti in modo naturale dalla lingua, ad es. type Coordinate = float * float o type String = [Char] .
  • I nomi lunghi possono essere abbreviati: 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 autodocumentazione.

Il lato 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 il suo DWORD = int e il suo HINSTANCE = HANDLE = void* e il suo LPHANDLE = HANDLE FAR* e così via. In tutti questi casi non ha alcun senso distinguere tra un HANDLE e un puntatore void o un DWORD e un intero ecc.

Accantonando il dibattito filosofico sul fatto che un re dovrebbe dare completa libertà ai propri sudditi e lasciare che siano responsabili per se stessi o se debbano avere tutte le loro azioni discutibili, potrebbe esserci un mezzo felice che consentirebbe i benefici di digitare aliasing mitigando il rischio di 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 indirizzare Intellisense a System.Diagnostics.DebuggerStepBoundaryAttribute. Potrebbero esserci altre funzionalità che potrebbero fornire altri benefici dell'aliasing di tipo più sicuro?

    
posta Rei Miyasaka 16.06.2011 - 21:12
fonte

3 risposte

3

Mi vengono in mente due funzioni:

Portabilità. in linguaggi come C, dove tipi di dati come int sono specifici della piattaforma, un alias come DWORD rende più facile assicurarsi che tu stia davvero usando un intero con segno a 32 bit ovunque, quando questo è il requisito per il tuo programma, anche quando porti il programma su una piattaforma dove int è ad es 16 bit senza segno e quindi DWORD deve essere un alias per signed long .

Abstraction. Nel tuo programma, potresti utilizzare molti numeri interi e in virgola mobile per scopi diversi. Creando alias come SPEED , HEIGHT , TEMPERATURE , è relativamente facile cambiare uno di quelli ad es. da float a double e lascia gli altri come sono.

    
risposta data 16.06.2011 - 23:43
fonte
2

Sono d'accordo con Andrea hai bisogno di incapsulamento, tuttavia non sono d'accordo sul fatto che questo deve essere costoso.

Penso che il medium Happy sarebbe typedef di tipo sicuro, probabilmente permettendo la conversione esplicita tra il tipo reale e il typedef, ma impedendo la conversione implicita.

vale a dire. il problema principale che vedo con typedef in molte lingue è che in realtà non introducono un nuovo tipo ma semplicemente un alias, mentre questo è utile, non è così utile come un nuovo tipo che è come il vecchio tipo ma con un nuovo nome . E la composizione o l'ereditarietà sono troppo pesanti se vuoi solo assicurarti di non mischiare un paio di variabili.

    
risposta data 23.06.2011 - 14:05
fonte
1

Penso che i tipi alias danno al programmatore pigro (molto) un incapsulamento economico. Quindi forse l'alternativa potrebbe essere solo usare l'incapsulamento (costoso) corretto.

C'è anche l'argomento che il primo è anche molto più ottimizzato per la macchina / linguaggio in uso rispetto al secondo, comunque.

    
risposta data 23.06.2011 - 08:47
fonte

Leggi altre domande sui tag