문제

가능한 복제 :
함수가 언제 너무 길습니까?

최근에 다른 개발자가 작성한 열악한 코드를 검토하고 나쁜 관행을 문서화하는 불가능한 작업을 받았습니다. (물론 이타적인 이유보다는 개발자의 작업에 대한 비용을 지불하지 않는 목적입니다!)

검토 된 코드에는 많은 코드 라인 인 몇 가지 절차가 있습니다. 가장 긴은 거의 600 줄입니다. 내가 생각한 몇 가지 문제는 유지 가능성과 가독성입니다.

속임수는 이것이 왜 이것이 나쁜 관행인지, 가능한 경우 잘 알려진 현재 참조 서적으로 백업하는 이유를 평신도에게 정당화해야한다는 것입니다. 비유도 좋습니다.

어떤 아이디어?

복제하다: 함수가 언제 너무 길습니까?
복제하다: 최대 기능 크기에 대한 최상의 규칙?

도움이 되었습니까?

해결책

코드 라인에 관한 것이 아닙니다. 처럼 스티브 맥코넬 그리고 밥 마틴 말하기 (코딩 모범 사례에 대한 두 가지 좋은 참조), 방법은 한 가지만 한 가지 일만해야합니다. 그러나 그 일을하는 데 많은 줄의 코드 라인이 필요한 줄입니다. "한 가지"가 작은 것들로 나눌 수 있다면 각각은 방법이 있어야합니다.

당신의 방법이 하나 이상의 일을하고 있다는 좋은 단서 :

  • 방법에서 하나 이상의 수준의 들여 쓰기 (한 가지 일만하기에는 너무 많은 논리 분기를 나타냅니다)
  • "단락 breaks" - 논리적 코드 그룹 간의 공백이 메소드가 두 가지 이상을 수행하고 있음을 나타냅니다.

몇가지 말하자면. Bob Martin은 또한 10 정도를 유지한다고 말합니다. 개인적으로 나는 보통 10을 위해 촬영하려고합니다. 그러나 궁극적으로 Loc는 거의 모든 것에 대한 나쁜 지표입니다. 실제 문제를 잠재적으로 지적 할 수있는 유용한 지표 일뿐입니다.

다른 팁

진짜 답변

특정 번호가 없습니다.

구체적인 대답

변호사 나 무언가에 대해 몇 가지 숫자로 정당화 해야하는 경우 상점의 일반적인 개발 편집기 창에 맞는 최대 줄 수를 파악하고 사용하십시오.

일반적인 관행

당신은 실제로 그런 식으로 그것을 보지 말아야하지만, 어떤 기능에서도 그렇게 복잡한 일이 없어야합니다.

각 작업 단위는 자체 단위 테스트 가능한 묘사 명명 된 방법으로 위임해야합니다. 이 작업을 수행하면 모든 방법이 줄을 세지 않고 작고 읽을 수 있습니다 ......

내가 보는 가장 큰 범죄자는 IF 진술의 중간에 3-4+ 부울 조건이 폭발 한 것입니다. 좋은 이름으로 한 부울에 모든 것을 감싸고, 그 자체로 복잡한 조각을 마무리하십시오.

우선, 길이 제한은 일반적인 메트릭과 완전히 분리되어 있습니다. 이것은 "함수는 한 가지만 수행하고 잘 수행합니까?"입니다. 그 질문에 대한 대답이 그렇지 않다면, 길이에 관계없이 기능은 어쨌든 좋은 것이 아닐 것입니다.

특히 최대 길이와 관련하여 코드의 인용문은 일반적으로 코딩 관행의 주제에 관한 최고의 책 중 하나로 간주됩니다.

때때로 복잡한 알고리즘은 더 긴 일상으로 이어질 것이며, 그러한 상황에서는 일상이 100-200 줄까지 유기적으로 성장할 수 있어야합니다. (라인은 소스 코드의 비정형, 비정규 라인입니다.) 수십 년의 증거에 따르면 그러한 길이의 루틴은 더 이상 짧은 루틴보다 오류가 발생하지 않는다고 말합니다. 중첩 깊이, 변수 수 및 기타 복잡성 관련 고려 사항과 같은 문제는 길이 제한 자체를 부과하는 대신 루틴의 길이를 지시합니다.

약 200 줄보다 더 긴 루틴을 작성하려면 조심하십시오. 비용 감소, 오류율 감소 또는 더 큰 루틴이 200 라인보다 큰 크기로 구별되는 연구 중 어느 것도, 200 줄의 코드를 통과함에 따라 이해력의 상한으로 연결되어야합니다.

이 글을 읽은 지 몇 년이 지났지 만 학습 perl 그들은 화면에 모든 것을 한 번에 맞출 수있는 것보다 더 이상 절차를 만드는 것이 좋습니다. 나는 이것이 좋은 척도라고 생각했다. 반복적 인 코드 (예 : 데이터베이스 액세스 및 속성 값을 할당)로 인해 여전히 읽을 수있는 더 긴 기능을 보았지만 이는 표준보다는 예외입니다.

렉스의 요점에 추가하려면 가능한 한 짧아야합니다. 밥 마틴은 10 이하로 말합니다

Object Mentor- 함수는 얼마나 크야합니까?

가능한 한 적은 적은.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top