Tipi di dati

I tipi possono essere visti come collezioni di valori omogenei ed effettivamente rappresentabili.

Omogenei perché questi valori devono condividere alcune proprietà strutturali, che li rendono simili fra loro.

Effettivamente rappresentabili perché dal punto di vista pratico deve essere possibile rappresentare i valori nella memoria di un computer. I numeri reali ad esempio non sono rappresentabili poiché ci sono numeri reali con cifre infinite, perciò possiamo sappresentare solo un sottoinsieme di questi numeri.

Tipi come aiuto per l’organizzazione concettuale

I tipi possono aiutare a disciplinare la struttura concettuale di un programma.

Tramite i tipi è possibile esprimere le differenze fra le varie entità che formano la soluzione di un problema dato. Usare i tipi permette di separare elementi concettualmente differenti.

L’uso di tipi diversi è contemporaneamente una documentazione ed una scelta di design: migliora la leggibilità del codice poiché conoscendo il tipo di una variabile abbiamo già un’idea del suo ruolo nel programa.

Tipi come supporto per l’astrazione

Una caratteristica dell’aiuto offerto dai tipi è la possibilità di dare un supporto per la procedura di astrazione di un programma, ad esempio associando - per mezzo di interfacce - un tipo con le operazioni che vi si possono applicare (ad esempio le operazioni aritmetiche sui tipi numerici); un’interfaccia può in questo senso essere vista come uno specchietto delle strutture fornite dal modulo per manipolare il valore.

Dal momento che i programmatori possono astrarre da ogni implementazione, possono concentrarsi sul disegnare il software con un approccio top-down.

Tipi come supporto per la correttezza

Il beneficio ovvio dell’uso dei tipi è il type-checking, ovvero la possibilità di usare i tipi per individuare errori nel programma, banalmente perché abbiamo provare a fare un assegnamento incompatibile o un operazione illegale (per il tipo in questione). I type-system più elaborati ci permettono di individuare incosistenze e problemi al livello dei tipi.

I tipi sono anche di grande aiuto nel processo di refactoring, ad esempio se decidessimo di cambiare la definizione di una struttura dati, il type-checker ci segnalerà immediatamente tutti i punti in cui si sono create inconsistenze e che hanno bisogno di essere aggiornate.

Il supporto per la correttezza si rifà al concetto più generale di “language safety”, ovvero l’abilità del linguaggio di garantire l’integrità delle sue astrazioni. I linguaggi di questo tipo sono anche detti linguaggi strongly-typed.

Tipi come supporto per l’implementazione

I tipi possono aiutare a migliorare l’efficienza dei programmi, infatti i tipi sono stati introdotti per la prima volta in Fortran per migliorare l’efficienza dei conti distinguendo fra numeri interi e reali, in tal modo il compilatore poteva rappresentare diversamente le operazioni richieste ottimizzando il linguaggio macchina.

I moderni compiler fanno molto affidamento ai type-checker per ottimizzare la generazione del codice.

Tipi statici vs tipi dinamici