코드 냄새 127 - 가변 상수

당신은 무언가를 상수로 선언합니다. 하지만 변경할 수 있습니다.

TL;DR: Use inmutable constants



문제


  • 최소한의 놀라움 원칙 위반
  • 커플링

  • 솔루션


  • 집행
  • 상수를 사용하지 마십시오. 테스트에서 조롱하기가 어렵습니다.

  • 문맥



    우리는 컴퓨터 프로그래밍에 대한 첫 번째 과정에서 상수를 선언하는 방법을 배웠습니다.

    항상 그렇듯이 무언가가 일정하다면 중요하지 않습니다.

    변이하지 않는 것이 중요합니다.

    샘플 코드



    잘못된




    const DISCOUNT_PLATINUM = 0.1;
    const DISCOUNT_GOLD = 0.05;
    const DISCOUNT_SILVER = 0.02;
    
    //Since variables are constants we cannot reassign them
    const DISCOUNT_PLATINUM = 0.05; //Error
    
    //We can group them
    const ALL_CONSTANTS = {
      DISCOUNT: {
        PLATINUM = 0.1;
        GOLD = 0.04;
        SILVER = 0.02;  
      },
    };
    
    const ALL_CONSTANTS = 3.14; //Error
    
    ALL_CONSTANTS.DISCOUNT.PLATINUM = 0.08; //NOT AN ERROR. WTF!
    
    
    const ALL_CONSTANTS = Object.freeze({
      DISCOUNT: 
        PLATINUM = 0.1;
        GOLD = 0.05;
        SILVER = 0.02; 
    });
    
    const ALL_CONSTANTS = 3.14; //Error
    
    ALL_CONSTANTS.DISCOUNT.PLATINUM = 0.12; //NOT AN ERROR. WTF!
    

    오른쪽



    export const ALL_CONSTANTS = Object.freeze({
      DISCOUNT: Object.freeze({
        PLATINUM = 0.1;
        GOLD = 0.05;
        SILVER = 0.02;  
      }),
    });
    
    const ALL_CONSTANTS = 3.14; //Error
    
    ALL_CONSTANTS.DISCOUNT.PLATINUM = 0.12; //ERROR
    
    //Code works, but it is coupled and we cannot test it
    
    Class TaxesProvider {
      applyPlatinum(product);
    }
    
    //Now we can couple to a interface (the protocol of taxes provider)
    //Since class has no setters it is constant an immuatable
    //And we can replace it on tests
    

    발각



    [X] 반자동

    변경된 값을 찾기 위해 돌연변이 테스트를 수행할 수 있습니다.

    태그


  • 상수

  • 결론



    가변성은 매우 중요합니다.

    올바른 도구를 사용하여 이를 시행해야 합니다.

    처지
















    더 많은 정보




  • 학점



    이 냄새는 영감을 받았습니다.

    사진 제공: Sangharsh Lohakare on Unsplash


    You start digging in the code. The more you dig, the more stuff you turn up. Eventually you dig yourself into a hole you can’t get out of. To avoid digging your own grave, refactoring must be done systematically.



    에릭 감마






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


    좋은 웹페이지 즐겨찾기