Bahasa utama saya diketik secara statis (Jawa). Di Jawa, Anda harus mengembalikan satu jenis dari setiap metode. Misalnya, Anda tidak dapat memiliki metode yang mengembalikan secara String
kondisional atau mengembalikan secara kondisional Integer
. Tetapi dalam JavaScript, misalnya, ini sangat mungkin.
Dalam bahasa yang diketik secara statis saya mengerti mengapa ini adalah ide yang buruk. Jika setiap metode dikembalikan Object
(orang tua umum semua kelas mewarisi dari) maka Anda dan kompiler tidak tahu apa yang Anda hadapi. Anda harus menemukan semua kesalahan saat dijalankan.
Tetapi dalam bahasa yang diketik secara dinamis, bahkan mungkin tidak ada kompiler. Dalam bahasa yang diketik secara dinamis, tidak jelas bagi saya mengapa fungsi yang mengembalikan beberapa jenis adalah ide yang buruk. Latar belakang saya dalam bahasa statis membuat saya menghindari penulisan fungsi-fungsi seperti itu, tetapi saya khawatir saya terlalu dekat dengan fitur yang bisa membuat kode saya lebih bersih dengan cara yang tidak bisa saya lihat.
Sunting : Saya akan menghapus contoh saya (sampai saya bisa memikirkan yang lebih baik). Saya pikir itu mengarahkan orang untuk menjawab suatu hal yang tidak saya coba sampaikan.
(coerce var 'string)
hasil string
atau (concatenate 'string this that the-other-thing)
juga. Saya sudah menulis hal-hal seperti ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
juga. Dan, di sana, saya mungkin hanya mengembalikan sesuatu yang mensubclasskan apa yang Anda minta: loader.getThingById (SubclassA.class, 14)
mungkin mengembalikan SubclassB
yang meluas SubclassA
...