web-dev-qa-db-fra.com

Quelqu'un peut-il me dire ce que signifie frappe forte et frappe faible et lequel est le meilleur?

Quelqu'un peut-il me dire ce que signifie frappe forte et frappe faible et lequel est le meilleur?

37
zamfir

Ce seront les réponses théoriques prises en compte, mais le côté pratique semble avoir été négligé ...

Le typage fort signifie que vous ne pouvez pas utiliser un type de variable alors qu'un autre est attendu (ou qu'il est soumis à des restrictions). Une frappe faible signifie que vous pouvez mélanger différents types. Dans PHP par exemple, vous pouvez mélanger des nombres et des chaînes et PHP ne vous plaindra pas car il s'agit d'un langage mal typé.

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

S'il est fortement typé, vous devrez convertir $ count d'un entier en une chaîne, généralement avec soit avec la conversion:

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

... ou une fonction:

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

Quant à ce qui est meilleur, c'est subjectif. Les défenseurs du typage fort vous diront que cela vous aidera à éviter certains bugs et/ou erreurs et vous aidera à communiquer le but d'une variable, etc. Ils vous diront également que les défenseurs du typage faible appellent un typage fort " Fluff de langage inutile rendu inutile par le bon sens "ou quelque chose de similaire. En tant que membre porteur du groupe de typage faible, je dois dire qu'ils ont mon numéro ... mais j'ai aussi le leur, etIpeux le mettre dans une chaîne: )

53
JoeBloggs

"Typage fort" et son opposé "typage faible" ont un sens plutôt faible, en partie parce que la notion de ce qui est considéré comme "fort" peut varier en fonction de la personne que vous demandez. Par exemple. C a été appelé à la fois "fortement typé" et "faiblement typé" par différents auteurs, cela dépend vraiment de ce à quoi vous le comparez.

En règle générale, un système de types devrait être considéré comme plus fort s'il peut exprimer les mêmes contraintes et davantage. Bien souvent, deux types de systèmes ne sont pas comparables, l'un pouvant comporter des caractéristiques, l'autre non, et inversement. Toute discussion sur les forces relatives relève alors de votre goût personnel.

Avoir un système de type plus fort signifie que le compilateur ou le moteur d’exécution signalera plus d’erreurs, ce qui est généralement une bonne chose, bien que cela puisse entraîner le coût de devoir fournir plus d’informations de type manuellement, ce qui pourrait être considéré comme un effort inutile. Je dirais que le "typage fort" est généralement mieux, mais il faut regarder le coût.

Il est également important de réaliser que "fortement typé" est souvent utilisé de manière incorrecte à la place de "statiquement typé" ou même de "manifeste typé". "Type statique" signifie qu'il existe des contrôles de type à la compilation, "manifeste typé" signifie que les types sont déclarés explicitement. Le typage manifeste est probablement le moyen le plus connu de renforcer un système de types (pensez à Java), mais vous pouvez augmenter la force par d'autres moyens, tels que l'inférence de type.

14
Peter Becker

Je tiens à répéter que le typage faible est pas identique au typage dynamique. 

C'est un article assez bien écrit sur le sujet et je recommanderais vivement de le lire si vous n'êtes pas sûr des différences entre les systèmes de types fort, faible, statique et dynamique. Il détaille les différences beaucoup mieux que ce à quoi on peut s’attendre dans une réponse courte, et contient des exemples très éclairants. 

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

5
Greg Sexton

Le typage fort est le modèle de type le plus courant dans les langages de programmation modernes. Ces langues ont une caractéristique simple: connaître les valeurs de type au moment de l'exécution. Nous pouvons dire que les langages fortement typés empêchent les opérations de mélange entre deux types de types différents ou plus. Voici un exemple en Java:

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

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

L'exemple précédent fonctionnera parfaitement jusqu'à ce que le programme atteigne la dernière ligne de code vers laquelle la ClassCastException va être levée, car Java est un langage de programmation fortement typé.

Quand on parle de faible typé langages, Perl en fait partie. L'exemple suivant montre que Perl n'a aucun problème à mélanger deux types différents.

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

J'espère que vous trouvez ça utile,

Merci.

4
miksiii

Cet article est une excellente lecture: http://blogs.Perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html J'ai clarifié beaucoup de choses pour moi, lorsque j'essaie de répondre à une question similaire, j'espère que d'autres la trouveront utile aussi.

Dactylographie forte et faible:

La manière la plus courante de classer les systèmes de types est probablement "forte" ou "faible". C'est regrettable, car ces mots ont presque pas ce qui signifie du tout. Il est possible, dans une mesure limitée, de comparer deux langages avec des systèmes de types très similaires, et en désignent un comme ayant le plus fort de ces deux systèmes. Au-delà, les mots ne veulent rien dire du tout.

Types statiques et dynamiques

C’est à peu près la seule classification commune des systèmes de types cela a un sens réel. En fait, sa signification est souvent sous-estimés [...] Les systèmes de types dynamiques et statiques sont deux choses complètement différentes, dont les objectifs sont partiellement chevauchement.

Un système de types statique est un mécanisme par lequel un compilateur examine code source et attribue des étiquettes (appelées "types") aux éléments du fichier syntaxe, puis les utilise pour déduire quelque chose sur le programme comportement. Un système de type dynamique est un mécanisme par lequel un compilateur génère du code pour garder une trace du type de données (par coïncidence, également appelé appelé son "type") utilisé par le programme. L'utilisation du même mot "type" dans chacun de ces deux systèmes n’est, bien entendu, pas tout à fait une coïncidence; pourtant, il est préférable de comprendre qu'il a une sorte de faible importance historique. Essayer de trouver un .__ crée une grande confusion. vision du monde dans laquelle "type" signifie vraiment la même chose dans les deux cas systèmes. Ce n'est pas.

Types explicites/implicites:

Lorsque ces termes sont utilisés, ils se réfèrent à la mesure dans laquelle a Le compilateur raisonnera sur les types statiques de parties d’un programme. Tout les langages de programmation ont une forme de raisonnement sur les types. Certains avoir plus que d'autres. ML et Haskell ont des types implicites, dans ce no (ou très peu, en fonction de la langue et des extensions utilisées) type les déclarations sont nécessaires. Java et Ada ont des types très explicites, et on déclare constamment les types de choses. Tout ce qui précède ont (relativement, comparé à C et C++, par exemple) type statique fort systèmes.

1
gonz

La frappe forte/faible dans une langue est liée à la facilité avec laquelle vous pouvez effectuer des conversions de types:

Par exemple en Python:

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

Où en langue C:

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

Ainsi, Python est plus typé que C (dans cette perspective). 

1
mehmet

Peut-être cela peut vous aider à comprendre la dactylographie forte et faible .......

Typing fort: Il vérifie le type de variables le plus tôt possible, généralement au moment de la compilation. Il empêche les opérations de mélange entre types incompatibles.

Un langage de programmation fortement typé est un langage dans lequel: 

  • Toutes les variables (ou types de données) sont connues au moment de la compilation
  • Il y a une application stricte des règles de dactylographie (une chaîne ne peut pas être utilisée On s'attendrait à un entier)
  • Toutes les exceptions aux règles de frappe entraînent une erreur de compilation

Typage faible: Tandis que le typage faible retarde la vérification des types du système le plus tard possible, généralement au moment de l'exécution. En cela, vous pouvez mélanger des types sans conversion explicite.

Un langage de programmation "de type faible" est simplement un langage qui n'est pas typé fort.

qui est préféré dépend de ce que vous voulez. pour les scripts et les bonnes choses, vous voudrez généralement un frappe faible, car vous voulez écrire le moins de code possible. dans les gros programmes, une frappe forte peut réduire les erreurs lors de la compilation.

0
Debiprasad