Ana dilim statik olarak yazılmış (Java). Java'da, her yöntemden tek bir tür döndürmeniz gerekir. Örneğin, koşullu olarak a döndüren String
veya koşullu olarak a döndüren bir yönteme sahip olamazsınız Integer
. Ancak, örneğin JavaScript'te bu çok mümkün.
Statik olarak yazılmış bir dilde bunun neden kötü bir fikir olduğunu anlıyorum. Her yöntem geri dönerse Object
(ortak ebeveyn tüm sınıflardan miras kalırsa ), o zaman siz ve derleyici neyle uğraştığınızı bilmiyorsunuz. Tüm hatalarını çalışma zamanında keşfetmen gerekecek.
Ancak dinamik olarak yazılmış bir dilde, bir derleyici bile olmayabilir. Dinamik olarak yazılmış bir dilde, neden birden çok tür döndüren bir işlevin kötü bir fikir olduğu açık değildir. Statik dillerdeki geçmişim, bu tür işlevler yazmaktan kaçınmama neden oluyor, ancak kodumu görememediğim şekilde daha temiz hale getirebilecek bir özellik konusunda yakından ilgilendiğimden korkuyorum.
Düzenleme : Örneğimi kaldıracağım (daha iyisini düşünene kadar). İnsanları yapmaya çalışmadığım bir noktaya cevap vermeye zorluyorum.
(coerce var 'string)
verimleri a string
veya (concatenate 'string this that the-other-thing)
aynı şekilde. Ben de böyle şeyler yazdım ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
. Ve orada, sadece istediğiniz şeyi alt sınıflara loader.getThingById (SubclassA.class, 14)
döndüren bir SubclassB
şeyi iade edebilirim : uzayan bir şeyi geri getirebilir SubclassA
...