깊게 중첩된 If 문을 줄이기 위해 일찍 반환

소개



코드에 깊은 중첩을 도입하는 것은 쉽습니다. 깊은 중첩을 줄이는 몇 가지 기술이 있습니다. 이러한 기술 중 하나는 "조기 반환"입니다. 깊은 중첩을 줄임으로써 논리를 쉽게 따를 수 있습니다. 너무 많은 시간을 들이지 않고도 잠재적인 버그를 발견할 수 있습니다. 최근에 Return Early 기법을 다시 살펴보았는데 이 포스트의 주요 내용이 될 것입니다.

깊게 중첩된 유효성 검사



입력에 따라 특정 문자열을 반환하는 메서드를 생각해 봅시다. 이상적인 입력 문자열은 "cat"이며 확인해야 할 다섯 가지 사항이 있습니다.
  • null 또는 비어 있음
  • 7글자
  • 보다 짧음
  • "나쁜 단어"포함
  • 에 숫자
  • 가 포함되어 있습니다.
  • 는 「고양이」

  • 위의 유효성 검사를 하나씩 구현할 수 있습니다.

    중첩된 if 문




    public string CheckInputString(string inputString)
    {
    
        string[] badWords = { "dog", "dogs" };
        if (!String.IsNullOrEmpty(inputString))
        {
            if (inputString.Length < 7)
            {
                if (!badWords.Contains(inputString))
                {
                    if (!inputString.Any(char.IsDigit))
                    {
                        if (inputString == "cat")
                        {
                            return "Meow";
                        }
    
                        return inputString;
                    }
    
                    return "the string contains numbers";
                }
    
                return "please dont use the bad words";
            }
    
            return "too long";
        }
    
        return "null or empty";
    }
    


    중첩되지 않은 if 문



    최상의 사례 시나리오에 집중하여 위의 모든 중첩된 if 문을 제거할 수 있습니다. 이 경우 입력 문자열이 "cat"인 것이 가장 좋습니다. 나머지 경우는 "잘못된"것으로 간주됩니다. "잘못된"결과를 만나자마자 값을 반환하고 메서드를 종료합니다.
    아래에서 볼 수 있듯이 초기 반환 기술을 활용하여 깊은 내포를 해결할 수 있습니다.

    public string CheckInputStringFixed(string inputString)
    {
    
        string[] badWords = { "dog", "dogs" };
    
        if (String.IsNullOrEmpty(inputString))
        {
            return "null or empty";
        }
    
        if (inputString.Length >= 7)
        {
            return "too long";
        }
    
        if (badWords.Contains(inputString))
        {
            return "please dont use the bad words";
        }
    
        if (inputString.Any(char.IsDigit))
        {
            return "the string contains numbers";
        }
    
        if (inputString != "cat")
        {
            return inputString; 
        }
    
        return "Meow";
    }
    


    이것은 이전 예제보다 훨씬 명확하게 보일 것입니다.

    결론



    원치 않는 상황이 발생하면 즉시 값을 반환하여 메서드에서 빠져나오는 반환 초기 기법을 다시 살펴보았습니다. 이 기술은 많은 상황에 적용될 수 있으며 코드의 가시성을 크게 높였습니다.

    좋은 웹페이지 즐겨찾기