Como você usa a digitação de pato em javascript sem sempre verificar propriedades e métodos?
Simples: nem sempre verifique propriedades e métodos.
No Ruby, o que você está chamando é chamado de "digitação de frango". Em um idioma dinamicamente digitado, você simplesmente confia que o chamador passa um objeto adequado para você. O trabalho do chamador é honrar o lado do contrato.
Eu sei que o javascript usa digitação de pato e, a princípio, achei que isso facilitaria o polimorfismo em comparação com linguagens fortemente tipadas como C #.
Você está confundindo vários eixos ortogonais de digitação aqui. Existem quatro eixos ortogonais de digitação:
- When : digitação dinâmica (tipos não são conhecidos e verificados até o tempo de execução) vs. digitação estática (tipos são conhecidos e verificados antes do tempo de execução)
- O que : digitação de pato (os tipos são baseados no comportamento ), tipagem estrutural (os tipos são baseados na estrutura ) e digitação nominal (os tipos são baseados no nome )
- Você pode vê-los? digitação explícita (os tipos precisam ser anotados explicitamente) vs. digitação implícita (tipos são inferidos)
- digitação forte vs. digitação fraca - você deve ter notado que eu não dei a esse título cativante nem explicação entre parênteses, porque, diferentemente dos sete termos acima, cada um com uma definição precisa universalmente aceita, esses dois termos têm cerca de uma dúzia de definições vagas semi-amplamente usadas que se contradizem; idealmente, você deve evitar esses termos completamente e, se precisar usá-los, defina-os com precisão primeiro
Como você mencionou o C #: ele é tipicamente estaticamente, mas suporta tipagem dinâmica por meio do tipo dynamic
, ele é tipicamente nominal, mas tipos anônimos usam tipografia estrutural e padrões sintáticos (como a sintaxe de compreensão de consulta LINQ) podem ser considerados patos -typed ou estruturalmente, é tipicamente explicitamente digitado, mas suporta digitação implícita para argumentos de tipo genérico e variáveis locais (embora o caso da variável local seja bastante estranho comparado à maioria dos outros idiomas, porque você não pode simplesmente deixar o tipo de fora, é necessário dê a ele um pseudo-tipo explícitovar
, em outras palavras, se você deseja um tipo implícito, deve explicitamente dizê-lo). Se o C # é forte ou fracamente digitado, é uma questão de qual definição dos dois termos que você usa, no entanto, observe que pode haver muitos erros de tipo de tempo de execução no C #, especialmente devido à covariância insegura da matriz.
Eu sei que não pude verificar, mas rastrear erros de tempo de execução de javascript pode ser um pesadelo, pois nem sempre acontecem onde o erro está realmente ocorrendo no código.
Depurar não é uma habilidade fácil de aprender. No entanto, existem técnicas para facilitar a depuração, por exemplo, o Saff Squeeze é uma técnica descrita por Kent Beck que usa testes e refatoração para depuração:
Teste de regressão e o aperto do Saff
Kent Beck, Instituto dos Três Rios
Resumo: Para isolar efetivamente um defeito, comece com um teste no nível do sistema e progressivamente inline e poda até que você tenha o menor teste possível que demonstre o defeito.