2013-02-04 1 views
0

것은 나는 다음과 같은 기능을 제공하는 임의의 프로그래밍 언어가 상상 :함수/메소드 오버로드가 코드 냄새 인 경우, 어리석은 메소드 이름을 피하려면 어떻게해야합니까?

string joinString(list<object> itemsToBeJoined, string separator) ... 

지금 나는 또한 문자열을 만들 값의 집합에 가입 할 수있는 또 다른 방법을 추가 할을,하지만 난 콜백 기능을 제공 할 이는 toString()을 사용하는 대신 값을 형식화 할 때마다 호출됩니다.

string joinString(list<object> itemsToBeJoined, function(object) callback, string separator) ... 

이것은 많은 코드 냄새로 간주되는 함수 이름 오버로딩과 관련이 있습니다. 그래서 나는 대신 다음과 같이 선언 할 수 있습니다 :

string joinStringUsingCallback(list<object> itemsToBeJoined, function(object) callback, string separator) ... 

이것은 과부하를 피하기 위해 성가신 이름으로 보입니다.

과부하를 피하기 위해 과부하와 거추장스러운 이름을 피할 수있는 세 번째 대안이 있습니까?

+2

"많은 사람들이 코드 냄새로 간주합니다"- 유능한 사람들은 그렇지 않습니다. 함수 이름 오버로딩은 매우 합법적 인 ad hoc 다형성입니다. 나쁜 냄새는 남용에서 비롯됩니다. –

+0

유능한 사람들이 그것을 코드 냄새로 보지 않는다면, 그 사람은 무능력하다는 것을 의미합니까? –

+0

기본 설정 작업에 대한 도움을 요청하십니까? 함수 오버로딩을 코드 냄새라고 생각하는 유능한 사람들은 비어 있습니다. 코드 냄새라고 생각하는 모든 사람들이 어떤 멤버를 가지고 있는지 분명하지 않습니다 ... "많은"멤버가 있다고 생각할 이유가 없습니다. 그러나 어떤 구성원이든 코드 냄새라는 주장을 정당화하고 코드 냄새 *가 무엇인지에 대한 이해를 보여줄 필요가 있습니다 ... 그렇지 않으면 불가능한 형태입니다. 그러나 그것은 당신에게 무엇입니까? "많은 것"에 의하여 너 자신을 의미하지 않으면, 의견에 과도한 무게를 추가하기 위하여 곱해. –

답변

1

자바를 사용하는 경우 기본 매개 변수가 없기 때문에 오버로드가 가장 적합 할 것이라고 생각합니다. varargs가 가장 깨끗한 설정이 아니기 때문입니다. C#과 같은 것을 사용하고 있는데 매개 변수의 기본값을 제공하거나 nullable 매개 변수를 허용 할 수있는 곳에서는 "콜백"에 default가 아니거나 null이 아닌지 확인할 수 있습니다. 그런 다음 하나의 서명 만 갖고 사용자가 필요한 옵션을 코드하도록합니다.

+0

나는이 답변을 정말로 좋아하는지 모르겠다. 그러나 나는 왜 그런지 잘 모르겠다. 그것은 유일한 것이지만, 그것은 upvote를 얻습니다. 그리고 나는 받아 들인 것으로 그것을 표시했습니다. 감사. –

0

오버로드가 냄새라고 나는 정말로 동의하지 않습니다. 매개 변수 유형이 모호하지 않으면 오버로드를 사용합니다. 그러나 어떤 상황에서 오버로드 된 메서드가 호출 될지 잘 모르겠다면 별도의 메서드 (길지만 의미있는 이름 포함)를 사용하는 것이 좋습니다.

0

작업을 별도의 기능으로 분리하여 우스운 기능 이름을 피할 수 있습니다.

join(convert(items, toString), separator)