Tipizzazione forte
In informatica, e in particolare in programmazione, l'espressione tipizzazione forte (strong typing[1]) può essere usata per caratterizzare il tipo di regole che un determinato linguaggio di programmazione impone, a livello sintattico o semantico, circa la tipizzazione dei dati e all'uso dei dati in relazione al loro tipo. L'opposto della tipizzazione forte è la tipizzazione debole.
Descrizione
modificaIn un linguaggio fortemente tipizzato, il programmatore è tenuto a specificare il tipo di ogni elemento sintattico che durante l'esecuzione denota un valore (per esempio un valore costante, una variabile o un'espressione), e il linguaggio garantisce che tale valore sia utilizzato in modo coerente con il tipo specificato: per esempio, non è possibile eseguire una somma aritmetica su dati di tipo stringa. Questo concetto generale può applicarsi con diverse sfumature; a seconda del contesto. Dunque, l'espressione linguaggio fortemente tipizzato può riferirsi a cose leggermente diverse:
- tipizzazione statica: tutti i controlli sull'uso corretto dei valori rispetto al loro tipo vengono eseguiti durante la compilazione;
- sicurezza rispetto ai tipi (type safety): è garantito che vengano fatti controlli esaustivi sull'uso dei valori rispetto al loro tipo, ma non necessariamente durante la compilazione (un programma potrebbe fallire durante l'esecuzione a causa di violazioni di tipo)
- impossibilità di eseguire conversioni di tipo;
- impossibilità di eseguire conversioni di tipo implicite;
Un esempio limite di linguaggio debolmente tipizzato è il linguaggio macchina, in cui un'area di memoria, rappresentata nel codice da un indirizzo di memoria, può essere usata indifferentemente per contenere valori di qualunque tipo, numeri interi, numeri con la virgola, caratteri, e così via. I linguaggi di programmazione ad alto livello tendono ad avere sistemi dei tipi più sicuri e quindi ad avvicinarsi all'ideale della forte tipizzazione, ma in genere rimangono disponibili meccanismi per trattare dati in modo flessibile che si prestano a essere utilizzati per violare il sistema dei tipi. Per esempio, il linguaggio C fè considerato un linguaggio fortemente tipizzato ma a volte si dice che Java, C#, Ada e Pascal sono più fortemente tipizzati del C in quanto il C supporta anche i seguenti meccanismi:
- le operazioni di casting (implicito o esplicito), con cui si converte una variabile da un tipo di dato a un altro: questo passaggio è effettuato per avvantaggiarsi di alcune caratteristiche delle gerarchie dei tipi;
- i puntatori a void, che godono di conversione di tipo implicita verso qualunque altro tipo puntatore;
- le unioni, che consentono di interpretare una collezione di dati correlati secondo diverse attribuzioni di tipo indipendenti.
Il C rimane comunque un linguaggio con tipizzazione statica in quanto i tipi delle variabili devono essere dichiarati al momento della loro definizione, e il tipo viene verificato dal compilatore in fase di compilazione e non durante l'esecuzione. In pratica non avviene la tipizzazione dinamica (una variabile non può cambiare tipo durante l'esecuzione del programma).
Note
modifica- ^ Type safety and strong typing—what are these terms?, su dev.to.
Collegamenti esterni
modifica- (EN) Denis Howe, strong typing, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL