Comment utilisez-vous la saisie de canard en javascript sans toujours vérifier les propriétés et les méthodes?
Simple: ne vérifiez pas toujours les propriétés et les méthodes.
Dans Ruby, ce que vous appelez est appelé "frappe de poulet". Dans une langue dynamiquement typée canard, vous avez simplement confiance que l'appelant vous passe un objet approprié. C'est le travail de l'appelant d'honorer sa partie du contrat.
Je sais que javascript utilise le typage canard et au début, je pensais que cela rendrait le polymorphisme facile par rapport aux langages fortement typés comme C #.
Vous confondez plusieurs axes orthogonaux de frappe ici. Il existe quatre axes orthogonaux de frappe:
- Quand : typage dynamique (les types ne sont pas connus et vérifiés jusqu'à l'exécution) vs typage statique (les types sont connus et vérifiés avant l'exécution)
- Quoi : typage canard (les types sont basés sur le comportement ), typage structurel (les types sont basés sur la structure ) et typage nominal (les types sont basés sur le nom )
- Peux-tu les voir? typage explicite (les types doivent être explicitement annotés) vs typage implicite (les types sont inférés)
- typage fort vs typage faible - vous avez peut-être remarqué que je n'ai pas donné à celui-ci un titre accrocheur ni une explication entre parenthèses, c'est parce que contrairement aux sept termes ci-dessus, qui ont chacun une définition précise universellement acceptée, ces deux termes ont environ une douzaine de définitions vagues semi-largement utilisées qui se contredisent; idéalement, vous devriez éviter complètement ces termes, et si vous devez les utiliser, définissez-les précisément en premier
Étant donné que vous avez mentionné C #: il est principalement typé statiquement, mais prend en charge la saisie dynamique via le type dynamic
, il est principalement typé nominalement, mais les types anonymes utilisent le typage structurel, et les modèles syntaxiques (tels que la syntaxe de compréhension des requêtes LINQ) peuvent être considérés comme des canards -typé ou structurellement typé, il est principalement explicitement typé mais prend en charge le typage implicite pour les arguments de type génériques et les variables locales (bien que le cas des variables locales soit plutôt étrange par rapport à la plupart des autres langues, car vous ne pouvez pas simplement laisser le type, à la place, vous devez lui donner un pseudo-type explicitevar
en d'autres termes, si vous voulez un type implicite, vous devez le dire explicitement). La question de savoir si C # est fortement ou faiblement typé dépend de la définition des deux termes que vous utilisez, cependant, notez qu'il peut y avoir beaucoup d'erreurs de type d'exécution en C #, en particulier en raison d'une covariance de tableau non sécurisée.
Je sais que je ne pouvais tout simplement pas vérifier, mais le suivi des erreurs d'exécution javascript peut être un cauchemar car elles ne se produisent pas toujours là où l'erreur se produit réellement dans le code.
Le débogage n'est pas une compétence facile à apprendre. Il existe cependant des techniques pour faciliter le débogage, par exemple le Saff Squeeze est une technique décrite par Kent Beck qui utilise des tests et une refactorisation pour le débogage:
Test de régression et compression Saff
Kent Beck, Three Rivers Institute
Résumé: Pour isoler efficacement un défaut, commencez par un test au niveau du système et progressivement en ligne et élaguez jusqu'à ce que vous ayez le plus petit test possible qui démontre le défaut.