Meine Hauptsprache ist statisch (Java). In Java müssen Sie von jeder Methode einen einzelnen Typ zurückgeben. Sie können beispielsweise keine Methode haben, die bedingt a String
oder bedingt a zurückgibt Integer
. In JavaScript ist dies beispielsweise sehr gut möglich.
In einer statisch getippten Sprache verstehe ich, warum dies eine schlechte Idee ist. Wenn jede Methode zurückgegeben wird Object
(das gemeinsame übergeordnete Element, von dem alle Klassen erben), wissen Sie und der Compiler nicht, womit Sie es zu tun haben. Sie müssen alle Ihre Fehler zur Laufzeit entdecken.
In einer dynamisch getippten Sprache gibt es möglicherweise nicht einmal einen Compiler. In einer dynamisch getippten Sprache ist mir nicht klar, warum eine Funktion, die mehrere Typen zurückgibt, eine schlechte Idee ist. Aufgrund meines Hintergrunds in statischen Sprachen vermeide ich es, solche Funktionen zu schreiben, aber ich fürchte, ich bin sehr gespannt auf eine Funktion, die meinen Code auf eine Weise bereinigen könnte, die ich nicht sehen kann.
Bearbeiten : Ich werde mein Beispiel entfernen (bis ich mir ein besseres vorstellen kann). Ich denke, es lenkt die Leute, auf einen Punkt zu antworten, den ich nicht anstrebe.
(coerce var 'string)
Ausbeuten a string
oder (concatenate 'string this that the-other-thing)
ähnlich. Ich habe auch Dinge wie geschrieben ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
. Und dort könnte ich nur etwas zurückgeben, das loader.getThingById (SubclassA.class, 14)
SubclassB
SubclassA