Quelqu'un peut-il me dire ce que le typage Fort et la faiblesse de frappe moyens et lequel est le mieux?
Réponses
Trop de publicités?Ce sera la théorie des réponses prises en charge, mais le côté pratique semble avoir été négligé...
Fort-typage signifie que vous ne pouvez pas utiliser un type de variable à un endroit où un autre est prévu (ou ont des restrictions à le faire). Faiblesse de frappe signifie que vous pouvez mélanger différents types. En PHP par exemple, vous pouvez combiner des nombres et chaînes de caractères et PHP ne vais pas me plaindre, car il est faiblement typé langue.
$message = "You are visitor number ".$count;
Si elle a été fortement typé, vous devez convertir les $count d'un entier en chaîne de caractères, généralement avec soit avec le casting:
$message = "you are visitor number ".(string)$count;
...ou une fonction:
$message = "you are visitor number ".strval($count);
Pour ce qui est mieux, c'est subjectif. Les défenseurs de fort-typage vous dira qu'il vous aidera à éviter certains bugs et/ou les erreurs et les aider à communiquer dans le but d'une variable etc. Ils vont aussi vous dire que les défenseurs de la faiblesse de frappe sera d'appel de fort-de taper "inutile de langue peluches qui est rendu inutile par le sens commun", ou quelque chose de similaire. Comme une carte de transport de membre de la faiblesse de frappe du groupe, je dois dire qu'ils ont eu mon numéro... mais j'ai la leur aussi, et je peux le mettre dans une chaîne :)
"Taper fort" et son contraire "typage faible" sont plutôt faibles dans ce sens, en partie car la notion de ce qui est considéré comme "fort" peut varier en fonction de qui vous demandez. E. g. C a été appelé à la fois "fortement typé" et "faiblement typé" par des auteurs différents, cela dépend vraiment de ce que vous comparer à d'.
Généralement un type de système devrait être considérée comme plus forte si elle peut exprimer les mêmes contraintes que l'autre et plus. Assez souvent, les deux systèmes ne sont pas comparables, bien que -- on pourrait avoir des caractéristiques les autres manques et vice versa. Toute discussion de la force relative est alors de goût personnel.
Ayant un fort système de type signifie que le compilateur ou le runtime rapport plus d'erreurs, ce qui est généralement une bonne chose, mais il pourrait se faire au coût d'avoir à fournir davantage d'informations de type manuellement, ce qui pourrait être considéré comme les efforts en valent pas la peine. Je dirais "taper fort" est généralement mieux, mais vous devez regarder le coût.
Il est également important de réaliser que "fortement typé" est souvent mal utilisé à la place de "statiquement typé" ou même "manifeste tapé". "Statiquement typé" signifie qu'il y a des vérifications de type à la compilation, "manifeste tapé" signifie que les types sont déclarés explicitement. Manifeste de groupage est probablement le meilleur moyen connu de fabriquer un système de type plus (pensez à Java), mais vous pouvez ajouter de la force par d'autres moyens tels que l'inférence de type.
Je tiens à réitérer que la faiblesse de frappe est pas le même que le typage dynamique.
C'est plutôt bien écrit d'article sur le sujet et je le ferais certainement vous recommandons de lui donner une lecture si vous n'êtes pas sûr des différences entre les forts, les faibles, type statique et dynamique des systèmes. Il détaille les différences beaucoup mieux que ce qui peut être attendu à une réponse courte, et a quelques exemples édifiants.
Cet article est une excellente lecture: http://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html a dissipé beaucoup de choses pour moi lors de la recherche d'essayer de répondre à une question similaire, espérons que d'autres le trouver utile.
Les forts et les Faibles Tapant:
Probablement la façon la plus courante de systèmes de type sont classés est "forte" ou "faibles". C'est malheureux, car ces mots n'ont presque pas de de sens du tout. Il est, dans une certaine mesure, possible de comparer les deux langues très similaire à type de systèmes, et de désigner l'un comme ayant le plus fort de ces deux systèmes. Au-delà, les mots ne veulent rien dire à tous.
Statique et Dynamique des Types
C'est à peu près la seule classification commune des systèmes de type qui a un réel sens. Comme une question de fait, il est d'une importance souvent sous-estimés [...] Dynamique et statique type de systèmes sont de deux choses complètement différentes, dont les objectifs arriver à partiellement chevauchement.
Un système de type statique est un mécanisme par lequel un compilateur examine le code source et donne des étiquettes (appelés "types") à des morceaux de la la syntaxe, et les utilise pour en déduire quelque chose sur le programme de comportement. Un système de type dynamique est un mécanisme par lequel un compilateur génère du code de garder une trace de ce genre de données (par coïncidence, également appelé son "type") utilisé par le programme. L'utilisation d'un même mot "type" dans chacun de ces deux systèmes est, bien sûr, pas vraiment entièrement coïncidence; mais il est mieux compris comme une sorte de faiblesse l'importance historique. Une grande confusion résultats d'essayer de trouver un vision du monde dans laquelle "type" veut vraiment dire la même chose dans les deux les systèmes. Il n'a pas.
Explicite/Implicite Types:
Lorsque ces termes sont utilisés, ils font référence à la mesure dans laquelle un le compilateur va raisonner sur la statique des types de parties d'un programme. Tous les langages de programmation ont une certaine forme de raisonnement sur les types. Certains ont plus que d'autres. ML et Haskell ont implicite types, dans la mesure où aucun (ou très peu, en fonction de la langue et des extensions en cours d'utilisation) type de les déclarations sont nécessaires. Java et Ada ont très explicite types, et on est constamment en déclarant les types de choses. Tous les ci-dessus ont (relativement, par rapport à C et C++, par exemple) forte de type statique les systèmes.
Le typage faible signifie que vous n'avez pas préciser quel est le type d'une variable, et de taper fort, tu donnes à un strict type de chaque variable.
Chacun a ses avantages, avec la faiblesse de frappe (ou de typage dynamique, comme on l'appelle souvent), en étant plus flexible et nécessitant moins de code de programmation. Taper fort, d'autre part, nécessite plus de travail de la part du développeur, mais en retour, il peut vous alerter à de nombreuses erreurs lors de la compilation de votre code, avant de l'exécuter. Typage dynamique peut retarder la découverte de ces petits problèmes jusqu'à ce que le code est exécuté.
En fonction de la tâche à portée de main, la faiblesse de frappe peut être mieux que de taper fort, ou vice versa, mais c'est surtout une question de goût. Faiblesse de frappe est couramment utilisé dans les langages de script, tandis que le typage fort est utilisé dans la plupart des langages compilés.