Mój podstawowy język to statyczny typ (Java). W Javie musisz zwrócić jeden typ z każdej metody. Na przykład nie możesz mieć metody, która warunkowo zwraca a String
lub warunkowo zwraca an Integer
. Ale na przykład w JavaScript jest to bardzo możliwe.
W statycznie pisanym języku rozumiem, dlaczego to zły pomysł. Jeśli każda metoda zwróci Object
(wspólny element nadrzędny, który dziedziczą wszystkie klasy), to Ty i kompilator nie macie pojęcia, z czym mamy do czynienia. Będziesz musiał odkryć wszystkie swoje błędy w czasie wykonywania.
Ale w dynamicznie pisanym języku może nie być nawet kompilatora. W dynamicznie pisanym języku nie jest dla mnie oczywiste, dlaczego funkcja zwracająca wiele typów jest złym pomysłem. Moje doświadczenie w językach statycznych sprawia, że unikam pisania takich funkcji, ale obawiam się, że jestem blisko myśli o funkcji, która może uczynić mój kod czystszym w sposób, którego nie widzę.
Edycja : zamierzam usunąć mój przykład (dopóki nie wymyślę lepszego). Myślę, że to kieruje ludźmi, aby odpowiedzieć na pytanie, którego nie próbuję rozwiązać.
(coerce var 'string)
plony a string
lub (concatenate 'string this that the-other-thing)
podobnie. Pisałem też takie rzeczy ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
. I tam mogę zwrócić tylko coś, co loader.getThingById (SubclassA.class, 14)
SubclassB
SubclassA