Ngôn ngữ chính của tôi được gõ tĩnh (Java). Trong Java, bạn phải trả về một loại duy nhất từ mọi phương thức. Ví dụ: bạn không thể có một phương thức trả về một cách có String
điều kiện hoặc trả về một cách có điều kiện Integer
. Nhưng trong JavaScript, ví dụ, điều này là rất có thể.
Trong một ngôn ngữ gõ tĩnh tôi hiểu tại sao đây là một ý tưởng tồi. Nếu mọi phương thức được trả về Object
(cha mẹ chung mà tất cả các lớp kế thừa từ đó) thì bạn và trình biên dịch không biết bạn đang xử lý vấn đề gì. Bạn sẽ phải khám phá tất cả những sai lầm của bạn trong thời gian chạy.
Nhưng trong một ngôn ngữ được gõ động, thậm chí có thể không có trình biên dịch. Trong một ngôn ngữ được gõ động, tôi không rõ tại sao một hàm trả về nhiều loại là một ý tưởng tồi. Nền tảng về ngôn ngữ tĩnh của tôi khiến tôi tránh viết các hàm như vậy, nhưng tôi sợ rằng tôi đang suy nghĩ kỹ về một tính năng có thể làm cho mã của tôi sạch hơn theo cách mà tôi không thể nhìn thấy.
Chỉnh sửa : Tôi sẽ xóa ví dụ của mình (cho đến khi tôi có thể nghĩ ra một ví dụ tốt hơn). Tôi nghĩ rằng nó chỉ đạo mọi người trả lời một điểm mà tôi không cố gắng thực hiện.
(coerce var 'string)
sản lượng a string
hoặc (concatenate 'string this that the-other-thing)
tương tự. Tôi cũng đã viết những thứ như thế ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
. Và, ở đó, tôi chỉ có thể trả lại một cái gì đó phân lớp những gì bạn yêu cầu: loader.getThingById (SubclassA.class, 14)
có thể trả lại một SubclassB
cái kéo dài SubclassA
...