Supponendo una lingua con un tipo di sicurezza intrinseca (ad esempio, non JavaScript):
Dato un metodo che accetta un SuperType, sappiamo che nella maggior parte dei casi in cui potremmo essere tentati di eseguire prove di tipo per scegliere un'azione:
public void DoSomethingTo(SuperType o) {
if (o isa SubTypeA) {
o.doSomethingA()
} else {
o.doSomethingB();
}
}
Di solito dovremmo, se non sempre, creare un singolo metodo scavalcabile sul SuperTypee fare questo:
public void DoSomethingTo(SuperType o) {
o.doSomething();
}
... in cui a ogni sottotipo viene data la propria doSomething()implementazione. Il resto della nostra applicazione può quindi essere adeguatamente ignaro del fatto che un dato SuperTypesia davvero un SubTypeAo un SubTypeB.
Meraviglioso.
Tuttavia, ci sono ancora is aoperazioni simili a quelle nella maggior parte, se non in tutte, le lingue sicure di tipo. E ciò suggerisce una potenziale necessità di test espliciti del tipo.
Così, in quali situazioni, se del caso, dovrebbero abbiamo o devono abbiamo eseguire test di tipo esplicito?
Perdona la mia distrazione o mancanza di creatività. So di averlo fatto prima; ma, onestamente, è stato tanto tempo fa che non riesco a ricordare se quello che ho fatto è stato buono! E nella memoria recente, non credo di aver riscontrato la necessità di testare tipi al di fuori del mio cowboy JavaScript.