기본 언어는 정적으로 입력됩니다 (자바). Java에서는 모든 메소드에서 단일 유형을 리턴해야합니다. 예를 들어 조건부로 a를 반환 String
하거나 조건부로 a를 반환하는 메서드를 사용할 수 없습니다 Integer
. 그러나 예를 들어 JavaScript에서는 이것이 가능합니다.
정적으로 입력 된 언어로 이것이 왜 나쁜 생각인지 알 수 있습니다. 모든 메소드가 반환되면 Object
(모든 클래스가 상속하는 공통 부모) 당신과 컴파일러는 당신이 다루고있는 것을 모릅니다. 런타임시 모든 실수를 발견해야합니다.
그러나 동적으로 유형이 지정된 언어에는 컴파일러가 없을 수도 있습니다. 동적으로 유형이 지정된 언어에서 여러 유형을 반환하는 함수가 나쁜 생각 인 이유는 분명하지 않습니다. 정적 언어에 대한 나의 배경은 그러한 함수를 작성하는 것을 피하게하지만, 내가 볼 수없는 방식으로 코드를 깨끗하게 만들 수있는 기능에 대해 염려하고 있습니다.
편집 : 예를 제거하려고합니다 (더 나은 것을 생각할 수있을 때까지). 나는 내가 만들려고하지 않은 지점에 대답하는 것이 사람들을 조종하고 있다고 생각합니다.
(coerce var 'string)
a string
또는 (concatenate 'string this that the-other-thing)
이와 비슷한 수율을 갖습니다 . 나도 같은 것을 썼다 ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
. 그리고 거기에서, 나는 당신이 요청한 것을 서브 클래스로 돌려주는 것만을 반환 할 loader.getThingById (SubclassA.class, 14)
수도 있습니다 : SubclassB
확장 하는 것을 반환 할 수도 있습니다 SubclassA
...