Qual è la differenza tra linguaggi di programmazione statici e dinamici? So che si tratta di sistemi di tipi, ma sto cercando chiarimenti più chiari.Differente tra i linguaggi di programmazione statici e dinamici
risposta
Statico Typing
tipizzazione statica significa che tipi sono noti e controllati accuratamente prima di eseguire il programma. Questo è spesso fatto dal compilatore della lingua. Ad esempio, il seguente metodo Java potrebbe causare un errore di compilazione, prima di eseguire il programma di:
public void foo() {
int x = 5;
boolean b = x;
}
dinamico Typing
tipizzazione dinamica significa che tipi sono conosciuti solo come il vostro programma è in esecuzione. Ad esempio, il seguente Python (3, se è importante) script può essere eseguito senza problemi:
def erroneous():
s = 'cat' - 1
print('hi!')
Sarà infatti uscita hi!
.Ma se chiamiamo erroneous
:
def erroneous():
s = 'cat' - 1
erroneous()
print('hi!')
Un TypeError
sarà sollevato a run-time quandoerroneous
si chiama.
staticamente tipizzati lingua:
- è necessario dichiarare il 'tipo' di variabili in anticipo.
NSString *string = @"Hello";
- Non è possibile salvare oggetto (cemento o primitiva) di altro tipo nella variabile della omonima
NSString *string = @"Hello"; int string = 9; // Not legal, compile type warning
esempio di staticamente lingua digitata: Ja va, Objective-C, ecc
dinamicamente tipizzati Lingua:
- Non c'è bisogno di dichiarare tipo di oggetto. sarà capito in runtime.
stringa = 'Ciao'
- Siamo autorizzati a cambiare tipo di oggetto per la stessa variabile, come i nomi sono legati ad un oggetto con operatore di assegnazione.
string = 'Hello' string = 9 // Allowed
esempio del linguaggio tipizzato in modo dinamico: Python, ecc
-1 La digitazione statica e dinamica non ha nulla a che fare con l'annotazione/l'inferenza del tipo. Accade così che molte vecchie lingue tipizzate staticamente insistano sulle annotazioni di tipo, ma questo è irrilevante. Ci sono linguaggi tipizzati staticamente senza annotazioni di tipo. (Haskell, per esempio.) – sleeparrow