Code Smell 133 - 하드코딩된 IF 조건

하드 코딩은 괜찮습니다. 짧은 시간 동안

TL;DR: Don't leave a hardcoded mess on IFs.



문제


  • 테스트 가능성
  • 하드코딩된 값
  • 개방/폐쇄 원칙 위반

  • 솔루션


  • 모두 동적 조건 또는 .

  • 문맥



    iF 조건을 하드코딩하는 것은 .

    물건을 정리해야 합니다.

    샘플 코드



    잘못된




    private string FindCountryName (string internetCode)
    {
      if (internetCode == "de")
        return "Germany";
      else if(internetCode == "fr") 
        return "France";
      else if(internetCode == "ar")
        return "Argentina";
        //lots of elses
      else
        return "Suffix not Valid";
    }
    

    오른쪽



    private string[] country_names = {"Germany", "France", "Argentina"} //lots more
    private string[] Internet_code_suffixes= {"de", "fr", "ar" } //more
    
    private Dictionary<string, string> Internet_codes = new Dictionary<string, string>();
    
    //There are more efficient ways for collection iteration
    //This pseudocode is for illustration
    int currentIndex = 0; 
    foreach (var suffix in Internet_code_suffixes) {
      Internet_codes.Add(suffix, Internet_codes[currentIndex]);
      currentIndex++;
    }
    
    private string FindCountryName(string internetCode) {
      return Internet_codes[internetCode];
    }
    

    발각



    [X] 자동

    If/else 조건을 확인하여 하드 코딩된 조건을 감지할 수 있습니다.

    태그


  • IF

  • 결론



    과거에는 하드 코딩이 옵션이 아니었습니다.

    최신 방법론을 사용하면 하드 코딩을 통해 학습한 다음 솔루션을 일반화하고 리팩토링합니다.

    처지











    더 많은 정보



  • 학점



    Unsplash의 Jessica Johnston 님의 사진


    Don't be (too) clever. My point was to discourage overly clever code because "clever code" is hard to write, easy to get wrong, harder to maintain, and often no faster than simpler alternatives because it can be hard to optimize.



    Bjarne Stroustrup






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


    좋은 웹페이지 즐겨찾기