댓글 쓰기가 나쁜 이유

To write comments or Not to write comments, that is the question



의심할 여지 없이 이것은 개발자들 사이에서 가장 논란이 되는 주제 중 하나입니다. 어떤 사람은 댓글을 쓰는 것이 최후의 선택이어야 한다고 생각하고 어떤 사람은 댓글을 자유롭게 사용할 수 있다고 생각합니다. 짐작하셨겠지만 저는 개인적으로 코드를 설명하기 위해 주석을 작성하는 것에 반대하며 여기에 그 이유를 언급할 수 있는 몇 가지 이유가 있습니다.

처음에는 좋아, 잠시 후 구식



작동하지 않는 코드를 작성하면 단위 테스트가 실패하거나 편집기(일명 컴파일러)가 불평할 것입니다. 그러나 귀하의 의견을 확인할 수 있는 메커니즘이 없습니다. 함수에 대한 주석을 작성한 지 1년이 지난 후 귀하 또는 다른 개발자가 그에 따라 주석을 변경하는 데 주의를 기울이지 않고 해당 함수의 기능을 변경한다고 가정해 보겠습니다. 주석이 여전히 코드의 기능을 설명하는지 확인하는 단위 테스트가 없기 때문입니다. 결국 이것은 프로젝트에서 너무 많은 쓸모없는 주석의 원인이 될 것입니다. 이것은 대부분의 개발자가 주석을 읽는 것조차 귀찮게 하지 않기 때문에 발생합니다.

좋은 코드에는 주석이 필요하지 않습니다



코드가 코드의 목적을 명확하게 설명한다면 애초에 주석이 필요한 이유는 무엇입니까? 읽기 쉬운 테스트와 함께 명확하고 읽기 쉬운 코드를 작성할 수 있다면 어떤 주석도 이를 능가할 수 없습니다.
예를 들어, 코드의 일부를 설명하기 위해 주석을 사용하는 코드가 있습니다. 주석의 필요성을 제거할 수 있는지 살펴보겠습니다.




글쎄요, 저는 여기서 3가지를 말할 수 있습니다:



<올>

  • 함수 이름 변경



    보시다시피 함수 이름은 많은 것을 말하지 않으므로 단어 대신 더 설명적인 이름을 사용하면 확실히 첫 번째 주석이 필요하지 않습니다. 내 제안은 getRemainingDaysToBirthday 또는 calculateRemainingDaysToBirthday입니다.



  • 설명적 조건 사용


    // if birthday has already passed, set next year as birthday
    if (today > upcomingBday) {
      upcomingBday.setFullYear(today.getFullYear() + 1);
    }
    

    여기서 주석을 사용하지 않고 코드 내부의 조건을 설명할 수 있습니다.


    const birthdayHasAlreadyPassed = today > nextBirthday;
    if (birthdayHasAlreadyPassed) {
      upcomingBday.setFullYear(today.getFullYear() + 1);
    }
    

    쉽죠?



  • 다른 기능 사용


    // getTime() returns in milliseconds so we divide the result in milliseconds to get number of days
    const result = Math.ceil((upcomingBday.getTime() - today.getTime()) / (24 * 60 * 60 * 1000));
    



    우선 이 코드를 읽는 사람은 아마도 24 * 60 * 60 * 1000가 특히 1000가 무엇을 하는지 이해하지 못할 것입니다. 대신 설명 상수를 사용하여 각 숫자가 무엇을 나타내는지 설명할 수 있습니다.


      const hoursInADay = 24;
      const minutesInAnHour = 60;
      const secondsInAMinute = 60;
      const oneSecondInMilliseconds = 1000;
    



    하지만 첫 번째 부분은 어떻습니까? 함수를 사용하여 가독성을 높일 수 있으며, 이 경우 이 코드가 수행하는 작업을 설명합니다.


    function getDaysToBirthday(nextBirthday, today) {
      const hoursInADay = 24;
      const minutesInAnHour = 60;
      const secondsInAMinute = 60;
      const oneMillisecond = 1000;
      const OneDayInMilliseconds = hoursInADay * minutesInAnHour * secondsInAMinute * oneMillisecond;
    
      const daysToBirthday = Math.ceil(nextBirthday.getTime() - today.getTime() / OneDayInMilliseconds);
    
      return daysToBirthday;
    }
    





  • 당신을 나쁜 개발자로 만듭니다



    언제든지 자신이 하고 있는 일을 주석으로 설명할 수 있는데 굳이 깔끔한 코드를 작성하는 이유는 무엇입니까? 주석 없이 깔끔한 코드를 작성하려면 항상 약간의 노력과 시간이 필요하므로 이에 대한 규칙을 제한함으로써 팀의 모든 사람이 자신을 설명하는 코드를 작성해야 합니다.




    그래서 나는 어떤 대가를 치르더라도 댓글을 피해야 합니까?



    댓글에 "절대"라고 말하는 사람을 찾을 수 없다고 생각하지만, 일반적으로 좋은 테스트와 함께 설명하는 깨끗하고 읽기 쉬운 코드를 작성하여 가능한 한 댓글 작성을 항상 피해야 합니다. 이렇게 하면 댓글이 필요하지 않습니다.

    그러나 문서 API에 주석을 사용하거나 팀이 좋은 코드를 작성하기 위해 최선을 다했지만 불가능한 복잡한 작업을 설명하는 것과 같이 유용할 수 있는 몇 가지 경우가 있지만 작업이 수행하는 작업 또는 이 코드가 존재하는 이유를 명확히 하기 위해 주석이 필요합니다. .




    부인 성명



    이 목록을 완성할 수 있거나 다른 의견을 가진 훌륭한 개발자가 많이 있다고 확신합니다. 아래 의견 섹션에서 저에게 큰 의미가 있다고 생각하는 것을 알려주고 제 지식을 키울 수 있도록 도와주세요. 미리 감사드립니다.

    좋은 웹페이지 즐겨찾기