En supposant un langage avec une sécurité de type inhérente (par exemple, pas de JavaScript):
Avec une méthode qui accepte a SuperType
, nous savons que dans la plupart des cas, nous pourrions être tentés d'effectuer des tests de type pour choisir une action:
public void DoSomethingTo(SuperType o) {
if (o isa SubTypeA) {
o.doSomethingA()
} else {
o.doSomethingB();
}
}
Nous devrions généralement, si pas toujours, créer une seule méthode pouvant être remplacée par le SuperType
et faire ceci:
public void DoSomethingTo(SuperType o) {
o.doSomething();
}
... dans lequel chaque sous-type reçoit sa propre doSomething()
implémentation. Le reste de notre application peut alors ignorer de manière appropriée si une donnée SuperType
est vraiment un SubTypeA
ou SubTypeB
.
Merveilleux.
Mais nous avons toujours des is a
opérations similaires à celles de la plupart, sinon de la totalité, des langages sécurisés. Et cela suggère un besoin potentiel d'essais de type explicites.
Dans quelles situations devrions- nous ou devons- nous effectuer des tests de type explicites?
Pardonnez mon absence ou mon manque de créativité. Je sais que je l'ai déjà fait mais honnêtement, il y a si longtemps, je ne me souviens plus si ce que j'ai fait était bon! Et de mémoire récente, je ne pense pas avoir eu le besoin de tester des types en dehors de JavaScript, mon cow-boy.