Quels sont les aspects clés d'un langage fortement typé?
Qu'est-ce qui rend un langage fortement typé? Je cherche les aspects les plus importants d'un langage fortement typé.
hier, j'ai demandé si PowerShell était fortement tapé, mais personne ne pouvait être d'accord sur la définition de "fortement tapé", donc je cherche à clarifier la définition.
N'hésitez pas à créer un lien vers wikipedia ou d'autres sources, mais ne vous contentez pas de copier-coller votre réponse.
8 réponses
le terme" fortement dactylographié " n'a pas de définition convenue.
Cela fait un "grand" argument dans un troll, parce que chaque fois que quelqu'un est avéré faux, il suffit de redéfinir pour dire ce qu'ils veulent. Autre que cela, le terme sert pas.
Il est préférable de ne pas utiliser le terme, ou, si vous l'utilisez, de définir rigoureusement la première. Si vous voyez quelqu'un d'autre l'utiliser, demandez-lui de définir le terme.
Tout le monde a sa propre définition. Certains que j'ai vu sont:
- fortement typé = statiquement typé
- fortement typé = explicitement typé
- fortement typé = nominalement typé
- fortement typé = typé
- fortement typé = n'a pas de typographie implicite, seulement explicite
- fortement dactylographié = n'a pas de typographie du tout
- fortement dactylographié = ce que je comprends / faiblement dactylographié = ce que je ne comprends pas
- fortement typé = C++ / faiblement typé = tout le reste
- fortement typé = Java / faiblement typé = tout le reste
- fortement typé = .NET / faiblement typé = tout le reste
- fortement dactylographié = my langage de programmation / faiblement dactylographié = your langage de programmation
en théorie des types, il existe la notion d'un système de type étant plus fort qu'un autre. En particulier, s'il existe une expression e1
telle qu'elle est acceptée par un système de type T1
, mais rejeté par un système de type T2
, puis T2
est dit plus fort que T1
. Il y a deux choses importantes à noter ici:
- c'est un comparatif, pas un absolu: il n'y a pas de fort ou faible , seulement plus fort et plus faible "1519360920
- il n'y a pas de valeur implicite dans le terme; plus fort ne signifie pas meilleur "
Selon B. C. Pierce, le gars qui a écrit "les Types et les Langages de Programmation et des formes Avancées et des Langages de Programmation" :
j'ai passé quelques semaines à essayer de régler la terminologie de "fortement typé," "statiquement typé," "coffre-fort", etc., et trouvé incroyablement difficile... Le l'utilisation de ces termes est si divers que pour les rendre presque inutile.
alors pas étonnant que vos collègues ne soient pas d'accord.
je dirais la réponse la plus simple : si vous pouvez concaténer une corde et un int sans moulage, alors il n'est pas fortement tapé.
EDIT: comme indiqué dans les commentaires, Java ne vient que :-(
la clé est de se rappeler qu'il y a une distinction entre statiquement dactylographié et fortement dactylographié. Un langage fortement typé signifie simplement qu'une fois assignée, une variable donnée se comportera toujours comme un certain type jusqu'à ce qu'elle soit réassignée. Par définition, les langages statiquement typés comme Java et C# sont fortement typés, tout comme de nombreux langages dynamiques populaires comme Ruby et Python.
Donc, dans un langage fortement typé
x = "5"
x toujours être une chaîne, et ne sera jamais un entier.
dans certaines langues faiblement dactylographiées, vous pourriez faire quelque chose comme
x = "5"
y = x + 3
// y is now 8
les gens confondent statically typed avec strongly typed. Typé statiquement signifie "Une chaîne est une chaîne est une chaîne de caractères". Fortement dactylographié signifie "Une fois que vous faites ceci une corde il sera traité comme une corde jusqu'à ce qu'il soit réassigné comme quelque chose de différent."
edit: je vois quelqu'un d'autre l'a fait remarquer, après tout :)
j'ai entendu quelqu'un dire dans une interview (je pense que C'était Anders Hejlsberg de C# et turbo pascal fame) que la dactylographie forte n'est pas quelque chose qui est on ou off, certaines langues ont un système de type plus fort que d'autres.
il y a aussi beaucoup de confusion entre typage fortement, faiblement, statique et dynamique où les langages typographiques assignent des types aux variables et les langages dynamiques donnent des types aux objets stockés dans les variables.
Try wikipédia pour plus d'infos, mais ne vous attendez pas à une réponse définitive: http://en.wikipedia.org/wiki/Strongly_typed_language
fortement dactylographié signifie que vous déclarez vos variables d'un certain type, et votre compilateur jettera un ajustement hissy si vous essayez de convertir cette variable à un autre type sans la couler.
Exemple (en java, vous l'esprit):
int i = 4;
char s = i; // Type mismatch: cannot convert from int to char
le terme "fortement dactylographié" est complètement et complètement absurde. Ça n'a aucun sens, et ne l'a jamais fait. Même si certaines des définitions revendiquées étaient exactes, Je ne vois aucun but à la raison de la distinction; Pourquoi est-il important de savoir, de discuter ou de débattre si une langue est fortement dactylographiée (peu importe ce que cela signifie) ou non?
c'est très similaire aux termes "Web 2.0" ou "OEM", qui n'ont pas non plus de sens réel.
ce qui est intéressant considérer comment ces phrases commencent et prennent racine dans la communication quotidienne.
typé Statiquement langue est celui où les variables doivent être déclarées avant d'être utilisées. Alors qu'un langage dynamiquement typé est un où les variables peuvent être utilisées à tout moment, même si elles ne sont pas déclarées. La seule condition est qu'ils doivent être initialisée avant d'être utilisée.
maintenant, venons-en au langage fortement typé . Dans un tel langage, les variables ont un type, et ils seront toujours de ce type. Ils ne peuvent pas être affectés à une valeur d'un autre type. Alors qu'un langage faiblement typé est un où les variables n'ont pas de type. On peut leur attribuer une valeur de n'importe quel type.
exemple:
Java est un statiquement typé ainsi que langage fortement typé . Il est statiquement typé, car il faut déclarer les variables avant de pouvoir être utilisés. Il est fortement typé, parce qu'une variable de type particulier int
conservera toujours des valeurs entières. Vous ne pouvez pas leur assigner boolean
.
Powershell est un dynamiquement typé ainsi que langage faiblement typé . Il est dynamiquement tapé car les variables n'ont pas besoin d'être déclarées avant de les utiliser. elle est faiblement typée car variable peut contenir une valeur d'un type à un moment donné alors qu'une valeur d'un autre type à un moment différent.