Supondo uma linguagem com alguma segurança de tipo inerente (por exemplo, não JavaScript):
Dado um método que aceita a SuperType
, sabemos que, na maioria dos casos, podemos ser tentados a executar testes de tipo para escolher uma ação:
public void DoSomethingTo(SuperType o) {
if (o isa SubTypeA) {
o.doSomethingA()
} else {
o.doSomethingB();
}
}
Normalmente, se não sempre, devemos criar um método único e substituível no SuperType
e fazer o seguinte:
public void DoSomethingTo(SuperType o) {
o.doSomething();
}
... em que cada subtipo recebe sua própria doSomething()
implementação. O restante de nosso aplicativo pode então ser adequadamente ignorante se qualquer dado SuperType
é realmente um SubTypeA
ou um SubTypeB
.
Maravilhoso.
Mas ainda temos is a
operações semelhantes na maioria, se não em todas, linguagens de tipo seguro. E isso sugere uma necessidade potencial de teste explícito de tipo.
Então, em que situações, se houver, devemos ou devemos executar testes explícitos de tipo?
Perdoe minha falta de espírito ou falta de criatividade. Eu sei que já fiz isso antes; mas, honestamente, faz muito tempo que não me lembro se o que fiz foi bom! E, na memória recente, acho que não encontrei a necessidade de testar tipos fora do JavaScript do meu cowboy.