risposta-alla-domanda-sullo-sviluppo-web-bd.com

Qualcuno può dirmi cosa è la tipizzazione forte e la digitazione debole e quale è la migliore?

Qualcuno può dirmi cosa è la tipizzazione forte e la digitazione debole e quale è la migliore?

37
zamfir

Questa sarà la risposta teorica, ma la parte pratica sembra essere stata trascurata ...

Una tipizzazione forte significa che non è possibile utilizzare un tipo di variabile laddove un altro è previsto (o che ha delle restrizioni per farlo). Una digitazione debole significa che è possibile combinare diversi tipi. Ad esempio, in PHP puoi combinare numeri e stringhe e PHP non si lamenterà perché è un linguaggio tipizzato debolmente.

$message = "You are visitor number ".$count;

Se è stato fortemente digitato, dovresti convertire $ count da un intero a una stringa, di solito con o con casting:

$message = "you are visitor number ".(string)$count;

... o una funzione:

$message = "you are visitor number ".strval($count);

Per quanto riguarda ciò che è meglio, è soggettivo. I sostenitori della tipizzazione forte ti diranno che ti aiuterà a evitare alcuni bug e/o errori e ti aiuterà a comunicare lo scopo di una variabile, ecc. Ti diranno anche che i sostenitori della tipizzazione debole chiameranno la tipizzazione forte " inutile linguaggio lanuginoso reso inutile dal buon senso ", o qualcosa di simile. Come membro portatore di carte del gruppo di battitura debole, dovrei dire che hanno il mio numero ... ma anch'io ho il loro eIposso metterlo in una stringa: )

53
JoeBloggs

"Strong typing" e il suo contrario "typing debole" sono piuttosto deboli di significato, in parte perché la nozione di ciò che è considerato "forte" può variare a seconda di chi chiedi. Per esempio. C è stato chiamato sia "fortemente tipizzato" che "debolmente tipizzato" da diversi autori, dipende in realtà da cosa lo si confronta.

Generalmente un sistema di tipi dovrebbe essere considerato più forte se può esprimere gli stessi vincoli di un altro e di più. Molto spesso, due sistemi di tipo non sono comparabili, tuttavia - uno potrebbe avere caratteristiche degli altri difetti e viceversa. Qualsiasi discussione sui punti di forza relativi è quindi all'altezza del gusto personale.

Avere un sistema di tipo più forte significa che il compilatore o il runtime riporteranno più errori, che di solito è una buona cosa, anche se potrebbe comportare la necessità di fornire più informazioni sul tipo manualmente, il che potrebbe essere considerato uno sforzo non utile. Direi che "scrivere forte" è generalmente meglio, ma devi considerare il costo.

È anche importante rendersi conto che "fortemente tipizzato" è spesso usato in modo errato al posto di "staticamente digitato" o addirittura "manifest digitato". "Scritte staticamente" significa che ci sono controlli di tipo in fase di compilazione, "manifest typed" significa che i tipi sono dichiarati esplicitamente. La tipizzazione del manifest è probabilmente il modo più conosciuto per rendere più forte un sistema di tipi (si pensi a Java), ma è possibile aggiungere forza con altri mezzi, come l'inferenza del tipo.

14
Peter Becker

Vorrei ribadire che la digitazione debole è non uguale alla tipizzazione dinamica. 

Questo è un articolo abbastanza ben scritto sull'argomento e consiglio vivamente di dargli una lettura se non sei sicuro delle differenze tra i sistemi di tipo forte, debole, statico e dinamico. Descrive le differenze molto meglio di quanto ci si possa aspettare in una risposta breve e ha alcuni esempi molto illuminanti. 

http://en.wikipedia.org/wiki/Type_system

5
Greg Sexton

Tipizzazione forte è il modello di tipo più comune nei moderni linguaggi di programmazione. Quelle lingue hanno una caratteristica semplice: conoscere i valori del tipo in fase di esecuzione. Possiamo affermare che le forti lingue tipizzate impediscono operazioni di missaggio tra due o più tipi diversi di tipi. Ecco un esempio in Java:

String foo = "Hello, world!";
Object obj = foo;

String bar = (String) obj;
Date baz = (Date) obj; // This line will throw an error

L'esempio precedente funzionerà perfettamente fino a quando il programma non rilascerà l'ultima riga di codice in cui verrà generata l'eccezione ClassCastException perché Java è un linguaggio di programmazione fortemente digitato.

Quando parliamo di weak typed languages, Perl è uno di questi. L'esempio seguente mostra come Perl non abbia problemi con il mixaggio di due tipi diversi.

$a = 10;
$b = "a";
$c = $a . $b;
print $c; # returns 10a

Spero che tu trovi questo utile,

Grazie.

4
miksiii

Questo articolo è un'ottima lettura: http://blogs.Perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html Ho risolto molte cose per me quando cerco di rispondere a una domanda simile, spero che anche gli altri lo trovino utile.

Digitazione forte e debole:

Probabilmente il modo più comune per classificare i sistemi è "forte" O "debole". Questo è sfortunato, dal momento che queste parole non hanno quasi nessun significato . È, in misura limitata, possibile confrontare due Lingue con sistemi di tipi molto simili, e designarne uno che abbia il Il più forte tra questi due sistemi. Oltre a ciò, le parole non significano nulla .

Tipi statici e dinamici

Questa è quasi l'unica classificazione comune dei sistemi di tipi Che ha un significato reale. In realtà, il suo significato è Spesso sottovalutato [...] I sistemi di tipo dinamico e statico sono Due cose completamente diverse, i cui obiettivi si sovrappongono parzialmente .

Un sistema di tipo statico è un meccanismo mediante il quale un compilatore esamina il codice sorgente E assegna etichette (chiamate "tipi") a frammenti della sintassi , Quindi le utilizza per dedurre qualcosa sul programma comportamento. Un sistema di tipo dinamico è un meccanismo mediante il quale un compilatore Genera codice per tenere traccia del tipo di dati (per coincidenza, anche Chiamato "tipo") utilizzato dal programma. L'uso della stessa parola "Tipo" in ciascuno di questi due sistemi non è, ovviamente, del tutto Casuale; tuttavia è meglio inteso come avente una sorta di debole significato storico. La grande confusione deriva dal tentativo di trovare una visione del mondo In cui "tipo" in realtà significa la stessa cosa in entrambi i sistemi . Non è così.

Tipi espliciti/espliciti:

Quando questi termini sono usati, si riferiscono alla misura in cui un compilatore Ragionerà sui tipi statici di parti di un programma. Tutti i linguaggi di programmazione Hanno una qualche forma di ragionamento sui tipi. Alcuni Hanno più di altri. ML e Haskell hanno tipi impliciti, in quanto non (O pochissimi, a seconda della lingua e delle estensioni in uso) sono necessarie le dichiarazioni di . Java e Ada hanno tipi molto espliciti e Uno dichiara costantemente i tipi di cose. Tutti i precedenti hanno (Relativamente, rispetto a C e C++, per esempio) forti sistemi di tipo statico .

1
gonz

La digitazione forte/debole in una lingua è legata alla facilità con cui puoi eseguire conversioni di tipi:

Ad esempio in Python:

str = 5 + 'a' 
# would throw an error since it does not want to cast one type to the other implicitly.

Dove come in linguaggio C:

int a = 5;
a = 5 + 'c';
/* is fine, because C treats 'c' as an integer in this case */

Quindi Python è più fortemente digitato di C (da questa prospettiva). 

1
mehmet

Può essere questo può aiutarti a capire la tipizzazione forte e debole .......

Tipizzazione forte: Controlla il tipo di variabili il più presto possibile, solitamente al momento della compilazione. Impedisce le operazioni di miscelazione tra tipi non corrispondenti.

Un linguaggio di programmazione fortemente tipografico è uno in cui: 

  • Tutte le variabili (o tipi di dati) sono conosciute al momento della compilazione
  • Esiste una rigida applicazione delle regole di battitura (non si può usare una stringa Dove ci si aspetterebbe un intero)
  • Tutte le eccezioni alle regole di digitazione determinano un errore di compilazione

Debole digitazione: Sebbene la digitazione debole ritardi il controllo dei tipi del sistema il più tardi possibile, in genere in fase di esecuzione. In questo puoi mescolare i tipi senza una conversione esplicita.

Un linguaggio di programmazione "tipizzato debole" è semplicemente uno che non è fortemente tipizzato.

che è preferito dipende da cosa vuoi. per gli script e le cose buone di solito vuoi una digitazione debole, perché vuoi scrivere meno codice possibile. nei grandi programmi, una forte digitazione può ridurre gli errori in fase di compilazione.

0
Debiprasad