Ma langue principale est typée de manière statique (Java). En Java, vous devez renvoyer un type unique de chaque méthode. Par exemple, vous ne pouvez pas avoir une méthode qui retourne conditionnellement un String
ou retourne conditionnellement un Integer
. Mais en JavaScript, par exemple, c'est très possible.
Dans un langage typé statiquement, je comprends pourquoi c'est une mauvaise idée. Si toutes les méthodes sont renvoyées Object
(le parent commun dont toutes les classes héritent), vous et le compilateur n'avez aucune idée de ce à quoi vous faites face. Vous devrez découvrir toutes vos erreurs au moment de l'exécution.
Mais dans un langage typé dynamiquement, il peut ne pas y avoir de compilateur. Dans un langage typé dynamiquement, il n’est pas évident pour moi qu’une fonction renvoyant plusieurs types soit une mauvaise idée. Mon expérience dans les langages statiques me permet d'éviter d'écrire de telles fonctions, mais je crains de ne pas être attentive à une fonctionnalité qui pourrait rendre mon code plus propre d'une manière que je ne peux pas voir.
Edit : Je vais supprimer mon exemple (jusqu'à ce que je puisse penser à un meilleur). Je pense que cela incite les gens à répondre à un point que je n'essaie pas de dire.
(coerce var 'string)
rendements a string
ou (concatenate 'string this that the-other-thing)
similaires. J'ai écrit des choses comme ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
aussi bien. Et, là, je pourrais seulement renvoyer quelque chose qui sous-classe ce que vous avez demandé: loader.getThingById (SubclassA.class, 14)
peut renvoyer un SubclassB
qui s'étend SubclassA
...