코드 냄새 119 - 계단 코드

10807 단어
중첩 부울 조건은 비즈니스 규칙을 나타냅니다. IF가 아님

TL;DR: Avoid checking for boolean expressions and returning an explicit boolean.



문제


  • 선언성
  • 닌자 코드
  • 가독성

  • 솔루션


  • 부울 비즈니스 공식 값을 반환합니다.

  • 문맥



    부울 수식을 처리할 때 부울 검사의 계단 후 명시적 참/거짓을 반환하는 것보다 비즈니스 부울 수식을 표시하는 것이 더 읽기 쉽습니다.

    샘플 코드



    잘못된




    def is_platypus(self):
        if self.is_mammal():
            if self.has_fur():
                if self.has_beak():
                    if self.has_tail():
                        if self.can_swim():
                            return True
        return False
    
    # This is also wrong since it is polluted with IFs and not readable by a biologist
    def is_platypus(self):
        if not self.is_mammal():
            return False
        if not self.has_fur():
            return False
        if not self.has_beak():
            return False
        if not self.has_tail():
            return False
        if not self.can_swim():
            return False 
        return True
    

    오른쪽



    def is_platypus(self):
        return self.is_mammal() &&  self.has_fur() && self.has_beak() && self.has_tail() && self.can_swim()
    
    #We can even group conditions according to animal taxonomies
    

    발각



    [X] 자동

    구문 트리를 기반으로 명시적 부울 값을 제거하는 코드를 안전하게 리팩토링할 수 있습니다.

    태그


  • 부울

  • 결론



    부울 반환에 주의하십시오.

    반환 후에 도 필요한 것입니다.

    처지































    더 많은 정보




  • 크레딧



    Jukan TateisiUnsplash의 사진

    이 제안에 대해 Nico K.에게 다시 한 번 감사드립니다.


    The real hero of programming is the one who writes negative code.



    더글러스 매킬로이






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


    좋은 웹페이지 즐겨찾기