Mi idioma principal es de tipo estático (Java). En Java, debe devolver un solo tipo de cada método. Por ejemplo, no puede tener un método que devuelva condicionalmente a String
o devuelva condicionalmente un Integer
. Pero en JavaScript, por ejemplo, esto es muy posible.
En un lenguaje escrito estáticamente, entiendo por qué es una mala idea. Si todos los métodos devueltos Object
(el padre común del que heredan todas las clases), usted y el compilador no tienen idea de lo que están tratando. Tendrás que descubrir todos tus errores en tiempo de ejecución.
Pero en un lenguaje de tipo dinámico, puede que ni siquiera haya un compilador. En un lenguaje de tipo dinámico, no es obvio para mí por qué una función que devuelve varios tipos es una mala idea. Mi experiencia en lenguajes estáticos hace que evite escribir tales funciones, pero me temo que estoy siendo una mente cerrada acerca de una característica que podría hacer que mi código sea más limpio de una manera que no puedo ver.
Editar : voy a eliminar mi ejemplo (hasta que se me ocurra uno mejor). Creo que está guiando a la gente a responder a un punto que no estoy tratando de hacer.
(coerce var 'string)
rendimientos de una string
o (concatenate 'string this that the-other-thing)
de igual manera. También he escrito cosas ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
así. Y, allí, podría devolverle algo que subclasifique lo que solicitó: loader.getThingById (SubclassA.class, 14)
podría devolver un SubclassB
SubclassA