코드 냄새 149 - 선택적 연결

우리의 코드는 더 강력하고 읽기 쉽습니다. 하지만 깔개 아래에 NULL을 숨깁니다.

TL;DR: Avoid Nulls and undefined. If you avoid them you will never need Optionals.



문제



  • 솔루션


  • null 제거
  • 정의되지 않은 거래

  • 문맥



    Optional Chaining , 옵션, 병합 및 기타 여러 솔루션은 악명 높은 null을 처리하는 데 도움이 됩니다.

    코드가 성숙하고 강력하며 null이 없으면 사용할 필요가 없습니다.

    샘플 코드



    잘못된




    const user = {
      name: 'Hacker'
    };
    
    if (user?.credentials?.notExpired) {
      user.login();
    }
    
    user.functionDefinedOrNot?.();
    
    // Seems compact but it is hacky and has lots
    // of potential NULLs and Undefined
    

    오른쪽



    function login() {}
    
    const user = {
      name: 'Hacker',
      credentials: { expired: false }
    };
    
    if (!user.credentials.expired) {
      login();
    }
    
    // Also compact 
    // User is a real user or a polymorphic NullUser
    // Credentials are always defined.
    // Can be an instance of InvalidCredentials
    // Assuming we eliminated nulls from our code
    
    if (user.functionDefinedOrNot !== undefined) {  
        functionDefinedOrNot();
    }
    
    // This is also wrong.
    // Explicit undefined checks are yet another code smell
    

    발각



    [X] 자동

    이것은 언어 기능입니다.

    우리는 그것을 감지하고 제거할 수 있습니다.

    태그



  • 결론



    많은 개발자는 null 처리로 코드를 오염시키는 것이 안전하다고 느낍니다.

    실제로 이것은 NULL을 전혀 처리하지 않는 것보다 안전합니다.

    Nullish Values , Truthy 및 Falsy도 코드 냄새입니다.

    우리는 더 높은 목표를 세우고 더 깨끗한 코드를 만들어야 합니다.

    장점: 코드에서 모든 null을 제거합니다.

    단점: 옵셔널 체이닝 사용

    못생긴: null을 전혀 처리하지 않음

    처지
















    더 많은 정보


  • Optional Chaining Reference










  • WAT?

    학점



    사진 제공: engin akyurt on Unsplash


    He who fights with monsters might take care lest he thereby become a monster. And if you gaze for long into an abyss, the abyss gazes also into you.



    니체






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


    좋은 웹페이지 즐겨찾기