La mia lingua principale è di tipo statico (Java). In Java, è necessario restituire un singolo tipo da ogni metodo. Ad esempio, non è possibile avere un metodo che restituisce un condizionatamente String
o ritorna condizionalmente una Integer
. Ma in JavaScript, ad esempio, questo è molto possibile.
In un linguaggio tipicamente statico capisco perché questa è una cattiva idea. Se ogni metodo restituito Object
(il genitore comune da cui ereditano tutte le classi), tu e il compilatore non avete idea di cosa avete a che fare. Dovrai scoprire tutti i tuoi errori in fase di esecuzione.
Ma in un linguaggio tipizzato in modo dinamico, potrebbe non esserci nemmeno un compilatore. In un linguaggio tipizzato in modo dinamico, non è ovvio per me una funzione che restituisce più tipi è una cattiva idea. Il mio background in linguaggi statici mi evita di scrivere tali funzioni, ma temo di avere una mentalità molto attenta a una funzionalità che potrebbe rendere il mio codice più pulito in modi che non riesco a vedere.
Modifica : ho intenzione di rimuovere il mio esempio (fino a quando non riesco a pensare a uno migliore). Penso che stia guidando le persone a rispondere a un punto che non sto cercando di esprimere.
(coerce var 'string)
rese a string
o (concatenate 'string this that the-other-thing)
similmente. Ho scritto anche cose del genere ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
. E lì, potrei solo restituire qualcosa che subclasse quello che hai chiesto: loader.getThingById (SubclassA.class, 14)
potrebbe restituire un oggetto SubclassB
che si estende SubclassA
...