Cela a été abordé lors d'une discussion avec un ami et je me suis trouvé dans l'impossibilité de trouver de bons arguments. Quels avantages confère le typage faible?
type-systems
type-safety
weak-typing
Fishtoaster
la source
la source
Réponses:
Le problème avec ce type de discussion est simplement que les termes "typage faible" et "typage fort" ne sont pas définis, contrairement à par exemple les termes "typage statique", "typage dynamique", "typage explicite", "typage implicite", " dactylographie "," typage structural "ou" typage nominal ". Heck, même les termes "typage manifeste" et "typage latent", qui restent des domaines ouverts de recherche et de discussion, sont probablement mieux définis.
Donc, tant que votre ami n’a pas défini le terme "typage faible" suffisamment stable pour pouvoir servir de base à une discussion, il n’a même aucun sens de répondre à cette question.
Malheureusement, mis à part la réponse de Nick , personne n’a pris la peine de donner sa définition non plus, et vous pouvez voir la confusion qui en résulte dans certains des commentaires. C'est difficile à dire, car personne ne fournit réellement leurs définitions, mais je pense en compter au moins trois différentes, rien que sur cette page.
Certaines des définitions les plus couramment utilisées sont (et oui, je sais qu’aucune d’entre elles n’a de sens, mais ce sont les définitions que j’ai déjà vues utiliser):
Les trois définitions qui semblent être les plus utilisées sont toutefois:
À moins que tout le monde est d' accord sur une définition de « typage faible » , même est , il ne fait même pas de sens de penser à ce que ses avantages pourraient être. Avantages de quoi? Pire encore, s’il n’ya pas de définition du tout , alors tout le monde peut modifier ses définitions pour s’ajuster à ses arguments, et chaque discussion est pratiquement garantie de dégénérer en guerre-flamme.
Personnellement, j’ai moi-même changé plusieurs fois de définition au cours des années et j’ai maintenant atteint le point où je ne considère même plus que les termes sont utiles. J'avais aussi l'habitude de penser que le typage faible (dans ses diverses définitions) avait sa place dans les scripts shell, mais chaque fois que je dois résoudre le même problème dans Bash et PowerShell, je me rappelle douloureusement à quel point je me suis trompé.
la source
N'oubliez pas qu'il existe deux concepts majeurs qui sont souvent confondus:
Frappe dynamique
Les avantages ici sont souvent considérés comme réservés aux "nouveaux" programmeurs, mais peuvent également convenir à tout programmeur:
Moins de code dans les cas où vous auriez sinon dû attribuer ou attribuer une nouvelle valeur:
Typage lâche ou faible
Avantages:
Évaluation booléenne implicite . Tout type peut être évalué comme un booléen. Cela présente également des avantages, tels qu'une partie d'un et
||
peut être utilisé dans une affectation sans conversion en booléen:Encore une fois, moins de code:
Même Java devait aller en partie, avec l'appel implicite à la
.toString()
combinaison d'objets avec unString
; sinon, les programmeurs Java le maudiraient toute la journée (les instructions du journal seraient hors de contrôle).Les deux définitions proviennent de http://en.wikipedia.org/wiki/Type_system . Il l'a dit mieux que moi.
la source
if
bloc ou d’une autre logique plus complexe (même au moment de l’exécution ou dynamique), la ligne suivante sera licite et exempte d’erreurs.Le principal argument en faveur d'un typage faible est celui de la performance. (Ceci est pour répondre à la question des PO comme indiqué). Il y a beaucoup de bonnes discussions sur dynamique vs statique, implicite vs explicite. etc.
C est le langage le plus célèbre faiblement typé, et il n’effectue aucune vérification à l’exécution ni à la compilation du type de variable. Essentiellement, vous pouvez lancer un
char *
vers unint *
et la langue ne l’intéressera pas. Alors pourquoi feriez-vous cela?La programmation en C est assez proche de la façon dont vous procéderiez avec un assemblage, il est donc parfois nécessaire de ne se préoccuper que d’une adresse. Il n’est pas rare de donner ou de faire passer une
void *
référence pour cette raison même. Si vous savez comment la mémoire est organisée (encore une fois un problème de C et d’assemblage), vous pouvez effectuer des calculs assez intéressants en fonction de l’adresse indiquée dans levoid *
pour obtenir les informations dont vous avez besoin. Cela peut vous permettre de court-circuiter le processus que vous auriez à suivre en Java, par exemple.Bien que la vérification de type au moment de l’exécution ne génère pas une charge de travail extraordinaire, il arrive parfois qu’elle soit juste suffisante pour que la section critique soit trop lente. Je pense surtout à la programmation intégrée et aux systèmes temps réel dans ce cas.
Cela dit, dans la plupart des cas, avoir un système de type fort contrôlé à la compilation ou à l'exécution aide plus souvent que nécessaire.
la source
Les utilisateurs débutants ont plus de facilité à saisir les fautes de frappe, par exemple dans Excel, javascript et vbscript. Vous négociez également une vitesse de développement pour des erreurs potentielles.
Bon article sur le sujet: typage fort vs tests forts
la source