¿Cómo se usa la escritura de pato en javascript sin verificar siempre las propiedades y los métodos?
Simple: no siempre verifique las propiedades y los métodos.
En Ruby, lo que llamas se llama "mecanografía de pollo". En un lenguaje de tipo dinámico, simplemente confía en que la persona que llama le pasa un objeto adecuado. El trabajo de la persona que llama es honrar su parte del contrato.
Sé que javascript utiliza la tipificación de pato y al principio pensé que esto facilitaría el polimorfismo en comparación con lenguajes fuertemente tipados como C #.
Está confundiendo múltiples ejes ortogonales de escribir aquí. Hay cuatro ejes ortogonales de escritura:
- Cuándo : escritura dinámica (los tipos no se conocen y se verifican hasta el tiempo de ejecución) frente a la escritura estática (los tipos se conocen y se verifican antes del tiempo de ejecución)
- Qué : tipificación de pato (los tipos se basan en el comportamiento ), tipificación estructural (los tipos se basan en la estructura ) y tipificación nominal (los tipos se basan en el nombre )
- ¿Puedes verlos? escritura explícita (los tipos tienen que ser anotados explícitamente) versus escritura implícita (los tipos se infieren)
- escritura fuerte versus escritura débil: es posible que haya notado que no le di a este un título pegadizo ni una explicación entre paréntesis, porque a diferencia de los siete términos anteriores, que tienen una definición precisa única universalmente aceptada, estos dos términos tener alrededor de una docena de definiciones vagas semi-ampliamente utilizadas que se contradicen entre sí; idealmente, debe evitar estos términos por completo, y si debe usarlos, defínalos con precisión primero
Como mencionó C #: en su mayoría está tipado estáticamente, pero admite el tipeo dinámico a través del tipo dynamic
, en su mayoría está tipeado nominalmente, pero los tipos anónimos usan tipeo estructural, y se puede argumentar que los patrones sintácticos (como la sintaxis de comprensión de consultas LINQ) son duck -tipo o estructuralmente tipado, en su mayoría está explícitamente tipado pero admite tipeo implícito para argumentos de tipo genérico y variables locales (aunque el caso de la variable local es bastante extraño en comparación con la mayoría de los otros idiomas, porque no puede dejar el tipo fuera, sino que debe darle un pseudotipo explícitovar
, en otras palabras, si quieres un tipo implícito, tienes que decirlo explícitamente). Si C # tiene un tipo fuerte o débil, es una cuestión de qué definición de los dos términos que usa, sin embargo, tenga en cuenta que puede haber muchos errores de tipo de tiempo de ejecución en C #, especialmente debido a la covarianza de matriz insegura.
Sé que no podría verificarlo, pero rastrear los errores de tiempo de ejecución de JavaScript puede ser una pesadilla, ya que no siempre ocurren donde el error realmente ocurre en el código.
La depuración no es una habilidad fácil de aprender. Sin embargo, existen técnicas para facilitar la depuración, por ejemplo, Saff Squeeze es una técnica descrita por Kent Beck que utiliza pruebas y refactorización para la depuración:
Pruebas de regresión y el apretón de Saff
Kent Beck, Instituto de los Tres Ríos
Resumen: Para aislar un defecto de manera efectiva, comience con una prueba a nivel del sistema y en línea y pode progresivamente hasta obtener la prueba más pequeña posible que demuestre el defecto.