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 SuperType
e 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 SuperType
sia davvero un SubTypeA
o un SubTypeB
.
Meraviglioso.
Tuttavia, ci sono ancora is a
operazioni 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.