코드 냄새 160 - 잘못된 ID = 9999

8508 단어
Maxint는 유효하지 않은 ID에 매우 적합한 숫자입니다. 우리는 결코 도달하지 못할 것입니다.

TL;DR: Don't couple real IDs with invalid ones. In fact: Avoid IDs.



문제


  • 위반
  • 생각보다 빨리 유효하지 않은 ID에 도달할 수 있습니다
  • .
  • 유효하지 않은 ID에도 사용하지 마십시오
  • .
  • 호출자에서 함수로 플래그 결합

  • 솔루션


  • 특수 개체로 특수 사례를 모델링합니다.
  • 9999, -1 및 0은 유효한 도메인 개체 및 구현 결합이므로 사용하지 마십시오.
  • Null 개체 도입

  • 문맥



    컴퓨팅 초기에는 데이터 유형이 엄격했습니다.

    그런 다음 우리는 발명했습니다.

    그런 다음 다형성 특수 값을 사용하여 성장하고 특수 시나리오를 모델링합니다.

    샘플 코드



    잘못된




    #include "stdio.h"
    #include "stdlib.h"
    #include "stdbool.h"
    #define INVALID_VALUE 999
    
    int main(void)
    {    
        int id = get_value();
        if (id==INVALID_VALUE)
        { 
            return EXIT_FAILURE;  
            // id is a flag and also a valid domain value        
        }
        return id;
    }
    
    int get_value() 
    {
      // something bad happened
      return INVALID_VALUE;
    }
    
    // returns EXIT_FAILURE (1)
    

    오른쪽



    #include "stdio.h"
    #include "stdlib.h"
    #include "stdbool.h"
    // No INVALID_VALUE defined
    
    int main(void)
    {    
        int id;
        id = get_value();
        if (!id) 
        { 
            return EXIT_FAILURE;
            // Sadly, C Programming Language has no exceptions
        }  
        return id;
    }  
    
    get_value() 
    {
      // something bad happened
      return false;
    }
    
    // returns EXIT_FAILURE (1)
    

    발각



    [X] 반자동

    코드에서 특수 상수와 특수 값을 확인할 수 있습니다.

    태그



  • 결론



    외부 식별자와 관련된 숫자를 사용해야 합니다.

    외부 식별자가 없으면 숫자가 아닙니다.

    처지











    더 많은 정보











    부인 성명



    코드 냄새는 그냥 내 .

    학점



    사진 제공: Markus Spiske on Unsplash


    Bugs lurk in corners and congregate at boundaries.



    보리스 베이저






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


    좋은 웹페이지 즐겨찾기