코드 냄새 19 — 선택적 인수

6995 단어 oopcodenewbietutorial
친근한 지름길로 위장한 또 다른 커플링 냄새.

TL;DR: Optional Arguments generate a hidden coupling in the name of smaller code.



문제


  • 커플링
  • 예기치 않은 결과
  • 부작용
  • 파급 효과
  • 선택적 인수가 있지만 기본 유형으로 제한되는 언어에서는 플래그를 설정하고 우발적인 IF(또 다른 냄새)를 추가해야 합니다.

  • 솔루션


  • 인수를 명시적으로 만듭니다.
  • 모든 함수 호출은 동일해야 합니다arity.
  • 언어가 지원하는 경우 명명된 매개변수를 사용하십시오.

  • 샘플 코드



    잘못된




    <?
    
    final class Poll {
    
        function _construct(array $questions, bool $annonymousAllowed = false, $validationPolicy = 'Normal') {
    
            if ($validationPolicy == 'Normal') {
              $validationPolicy = new NormalValidationPolicy();
            }
            //...
        }
    }
    
    //Valid
    new Poll([]);
    new Poll([], true);
    new Poll([], true , new NormalValidationPolicy());
    new Poll([], , new StrictValidationPolicy());
    

    오른쪽



    <? 
    
    final class Poll {
    
        function _construct(array $questions, AnonnyomousStrategy $annonymousStrategy, ValidationPolicy $validationPolicy) {            
            //...
        }
    }
    
    
    //invalid
    new Poll([]);
    new Poll([], new NoAnonnyomousValidStrategy());
    new Poll([], , new StrictValidationPolicy());
    
    //Valid
    new Poll([], new NoAnonnyomousValidStrategy(), new StrictValidationPolicy());
    

    발각



    언어가 선택적 인수를 지원하면 탐지가 쉽습니다.

    태그


  • 옵션
  • 게으름

  • 결론



    명시하십시오. 더 짧고 더 많이 결합된 함수 호출보다 가독성이 좋습니다.

    더 많은 정보


  • Function Arity







  • The trouble with programmers is that you can never tell what a programmer is doing until it’s too late.



    시모어 크레이






    이 기사는 CodeSmell 시리즈의 일부입니다.




    최종 업데이트: 2021/06/30

    좋은 웹페이지 즐겨찾기