함수의 최대 길이로 입증 된 것은 무엇입니까? [닫은] 영향을 줍니까?

함수 길이가 프로그래머의 생산성에 영향을 줍니까? 그렇다면 생산성 손실을 피하기위한 최대 라인 수는 얼마입니까?

이것은 매우 의견이 많은 주제이므로 일부 데이터로 주장을 백업하십시오.



답변

1970 년에이 미친 라켓을 시작한 이래로, 실제로 하나 이상의 인쇄 된 페이지 (약 60 줄)가 필요한 하나의 모듈을 보았습니다 . 더 긴 모듈을 많이 보았습니다.

그 문제에 대해서는 더 긴 모듈을 작성했지만 일반적으로 큰 스위치 상태로 작성된 대형 유한 상태 머신이었습니다.

문제의 일부는 요즘 프로그래머가 물건을 모듈화하도록 가르치지 않았다는 것 같습니다.

수직 공간 낭비를 최대화하는 코딩 표준도 문제의 일부인 것으로 보입니다. (저는 Gerald Weinberg 의 ” 컴퓨터 프로그래밍의 심리학 “을 읽은 소프트웨어 관리자를 아직 만나지 못했습니다 . Weinberg는 여러 연구에서 프로그래머의 이해가 본질적으로 프로그래머가 특정 순간에 볼 수있는 것으로 제한됨을 보여주었습니다. 프로그래머는 페이지를 스크롤하거나 페이지를 넘기면 이해력이 크게 떨어집니다. 기억하고 추상화해야합니다.)

FORTH 로부터 많은 문서화 된 프로그래머의 생산성 향상은 소스 코드에 대한 FORTH “블록”시스템으로 인한 것이라고 확신합니다 . 모듈은 최대 16 줄의 64 자로 제한되었습니다. 무한히 고려할 수는 있지만 어떤 상황에서도 17 줄 루틴을 작성할 수는 없습니다 .


답변

정말로 적당한 크기는 무엇입니까?

사용하는 언어에 따라 다르지만 일반적으로 (나의 개인적인 취향에 따라) :

  • 이상적으로 , 25 줄 미만.
  • 수용 가능한 미만의 35 개 라인.

더 있다면 나중에 돌아와서 다시 작업해야 할 문제입니다.

그러나 현실적으로 , 당신이 무언가를 전달해야 할 때 필요하고 어떤 식 으로든 뱉어내는 것이 더 합리적이라고 생각하는 모든 크기는 때로는 선적하기 전에 누군가가 검토하기를 더 쉽게 만듭니다. (그러나 여전히 나중에 다시 가져옵니다).

(최근에 우리 팀은 코드베이스에서 프로그램을 실행했습니다. 우리는 197 개의 메소드를 가진 클래스를 찾았고 3 개의 메소드 만있는 클래스를 찾았지만 그 중 하나는 600 줄이었습니다. 귀여운 게임 : 2 악의 더 나쁜 점은 무엇입니까?)


이제 더 많은 대답을 얻으려면 … 일반적으로 한 두 명의 위대한 인물을 인용하는 것이 좋습니다 (TM)으로 간주되므로 다음과 같습니다.

모든 것이 가능한 한 단순해야하지만 단순하지 않아야합니다. 아인슈타인

더 이상 추가 할 항목이 없을 때가 아니라 더 이상 제거 할 항목이 없을 때 완벽하게됩니다. 생 텍쥐페리 드 A.


주석 스타일에 대한 부록

이것에 대한 부록으로서, 함수는 그 의도를 설명하는 명확한 이름을 가져야합니다. 주석과 관련하여 일반적으로 함수 내부에는 주석을 달지 않습니다.

  • 코멘트“왜?” ,
  • 코드“어떻게?” .

각 기능의 맨 위에있는 설명 블록 (설명 필요)으로 충분합니다. 함수가 작고 함수 이름이 충분히 명시 적이라면 달성하고자하는 것과 그 이유를 말하면됩니다. 의도가 불분명 한 경우 25-35 라인 규칙을 위반하는 함수의 경우 일부 언어의 필드 또는 블록 시작에 대해서만 인라인 주석을 사용합니다. 예외적 인 상황이 발생할 때 코드 내에서 블록 주석을 사용합니다 (예를 들어 필요하지 않거나 수행하려는 catch 블록은 이유를 알려주는 주석이 있어야 함).

자세한 내용 은 스타일 및 주석 코드 권장 사항에 대한 답변 을 읽으십시오.


답변

제 생각에는 모든 기능은 가능한 한 작아야합니다. 각 기능은 한 가지 작업 만 수행하고 잘 수행해야합니다. 그것은 최대 길이 질문에 실제로 대답하지는 않지만 기능의 길이에 대한 나의 감정입니다.

밥 아저씨의 말을 사용하려면 “더 이상 추출 할 수 없을 때까지 추출하십시오. 떨어질 때까지 추출하십시오.”


답변

건물의 최대 높이는 얼마입니까? 빌드 위치 또는 원하는 높이에 따라 다릅니다.
다른 도시에서 온 다른 사람들로부터 다른 답변을 얻을 수 있습니다.
일부 스크립트 함수 및 커널 인터럽트 처리기는 매우 깁니다.


답변

나를 위해 작동하는 방법은 다음과 같습니다. 더 긴 기능의 일부가 의미있는 이름을 줄 수 있습니까? 나는 방법의 길이가 좋은 명명과 같이 중요하지 않다고 생각합니다. 이 방법은 이름이 말하는 것을 더 이상해서는 안됩니다. 그리고 당신은 좋은 이름을 줄 수 있어야합니다. 메소드의 이름을 적절하게 지정할 수 없으면 코드가 잘 맞지 않을 수 있습니다.


답변

필요한 작업을 수행해야하는 한 더 이상 필요하지 않습니다.


답변

트레이드 오프가 있다고 생각합니다. 짧은 메소드가 많으면 하나의 긴 메소드보다 디버그하기가 더 어렵습니다. 하나의 메소드 호출을 추적하기 위해 편집기를 20 또는 30 번 서로 다른 곳으로 이동해야하는 경우,이를 모두 머리 속에 두는 것은 어렵습니다. 한편 잘 작성된 명확한 방법이 있다면 100 줄이더라도 머리에 두는 것이 더 쉽습니다.

실제 질문은 왜 항목이 다른 방법으로 이루어져야하는지, 위의 답변은 코드 재사용입니다. 코드를 다시 사용하지 않거나 알지 못하는 경우 하나의 거대한 방법으로 코드를 남기고 재사용해야 할 때 재사용해야 할 부분을 분할하는 것이 좋습니다. 더 작은 방법으로 사용합니다.

실제로 좋은 방법 설계의 일부는 기능적으로 응집력있는 방법을 만드는 것입니다 (본질적으로 한 가지 일을합니다). 방법의 길이는 중요하지 않습니다. 함수가 잘 정의 된 것을 수행하고 1,000 줄이면 좋은 방법입니다. 함수가 3 개 또는 4 개의 작업을 수행하고 15 행에 불과하면 나쁜 방법입니다 …