Minha linguagem principal é digitada estaticamente (Java). Em Java, você deve retornar um único tipo de cada método. Por exemplo, você não pode ter um método que retorne condicionalmente a String
ou retorne condicionalmente a Integer
. Mas em JavaScript, por exemplo, isso é muito possível.
Em uma linguagem de tipo estaticamente, entendo por que essa é uma má idéia. Se todo método retornado Object
(o pai comum de onde todas as classes herdam), você e o compilador não têm idéia do que estão lidando. Você terá que descobrir todos os seus erros em tempo de execução.
Mas em uma linguagem de tipo dinâmico, pode até não haver um compilador. Em uma linguagem de tipo dinâmico, não é óbvio para mim por que uma função que retorna vários tipos é uma má idéia. Minha formação em linguagens estáticas me impede de escrever essas funções, mas receio que eu esteja pensando sobre um recurso que poderia tornar meu código mais limpo de maneiras que não consigo ver.
Edit : Vou remover meu exemplo (até que eu possa pensar em um melhor). Eu acho que está orientando as pessoas a responderem a um ponto que não estou tentando fazer.
(coerce var 'string)
rendimentos a string
ou da (concatenate 'string this that the-other-thing)
mesma forma. Eu escrevi coisas assim ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
também. E, não, eu só poderia retornar algo que subclasses que você pediu: loader.getThingById (SubclassA.class, 14)
pode retornar um SubclassB
que se estende SubclassA
...