과부하 또는 선택적 매개 변수


10

특정 매개 변수를 받거나받지 못하는 함수가있을 때 함수를 오버로드하거나 선택적 인수를 추가하는 것이 더 낫습니까?

각각의 기복이 있다면 언제 사용합니까?


선택적 매개 변수를 갖는 최적화 관점에서 더 나은 옵션입니다.
Maneet Puri 2016

답변:


12

언어가 올바르게 지원하는 경우 (예 : 해당되는 경우 형식 안전) 다음과 같은 이유로 선택적 인수를 선호합니다.

  • 그들은 당신의 의도를 더 잘 전달하므로 아무도 당신의 기능 과부하가 다른 것을 할 것이라고 의심하지 않습니다.
  • 함수 오버로드가보다 포괄적 인 코드 만 위임하더라도 유지 관리해야 할 코드가 줄어 듭니다. 나중에 함수의 이름을 바꾸려면 최소한 3 개의 장소가 있어야합니다 (두 개의 정의 + 하나의 호출).
  • 컴파일러 (있는 경우)는 더 작은 바이너리를 생성 할 수 있습니다.
  • 선택적 인수는 적어도 일부 언어에서는 더 잘 확장됩니다. 믹스 앤 매치 기능을 가진 3 개의 선택적 인수를 원한다면 어떻게해야합니까? 완전한 유연성을 위해서는 6 개의 과부하가 필요합니다.
  • 객체 메소드 인 경우 여러 개의 오버로드로 인해 서브 클래스에서 재정의 구현이 크게 방해됩니다.

8 필요하지 않습니까? 세 가지 선택적인 인수 a이며 다음 bc같은 가능성이 있습니다. none, a, b, c, ab, ac, bc, abc. 그것은이다 2^n, 다른 유형하지n!
마크

0

생성자 상황을 가정 : 종종 많은 옵션이있는 상황을 방지하기 위해 유창한 빌더 패턴을 선택합니다.

예 : Ordering.natural().onResultOf(function).reverse().compound(Ordering.natural().onResultOf(function2))구아바에서 구현 된 유창한 빌더 인터페이스를 호출하는 예입니다.

물론 빌더의 상태를 유지하기 위해 별도의 객체가 필요하지만 생성 된 동작과 생성 된 동작을 분리하여 전반적인 복잡성을 줄입니다.


이것은 질문에 대답하지 않습니다.
Andy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.