2010-06-04 2 views
3

가능한 중복 :
How many lines of code should a function/procedure/method have?기능 길이가 얼마나 커야합니까 (함수의 코드 행)?

내가 기능을 가지고해야 몇 줄의 코드를 알고 싶습니다? 너무 많은 줄이 너무 많습니다.

나는이 글을 10 ~ 20 줄 정도 뒤에서 읽었지만 화면에는 너무 많은 줄만 넣을 수 있기 때문에 읽었다. 이제 화면 크기가 커지면 사실이 아닐 것입니다.

함수의 아무 부분도 DRY 원칙을 무시한 다른 곳에서 사용된다고 가정 해 봅시다.

다른 사람들의 의견을 듣고 싶습니다.

감사합니다.

: 중복 게시 When is a function too long? : 게시했을 때 찾을 수 없습니다.

+1

우리가 대답하기 전에 "코드 줄"을 정의해야합니다. – corsiKa

+5

27 시간 반. – Will

+0

, 무의미한 의견에 감사드립니다. 기분이 나아 졌으면 좋겠다. – hIpPy

답변

5

이런 질문은 Code Complete에 잘 답변되어 있습니다. Steve McConnel은 전체 페이지을 작성하여이 질문에 답변했습니다. 그의 결론 : 증거

수십 년은 길이 (> 100 개 라인)의 루틴 짧은 루틴보다 경향이 더 이상의 오류 없음을 말한다. 같은 루틴의 응집력, 의사 결정 점의 수와 같은 문제가 에 필요한 의견의 수는 루틴을 설명하자, 오히려 그 자체 길이 제한을 부과하는 것보다 루틴 의 길이를 지시 다른 복잡성 관련 고려 사항 . 그런데 약 200 라인 이상의 보다 긴 루틴을 쓰고 싶다면주의하십시오.

난 정말 논리적 작업 단위 내 방법을 유지하는 것을 선호하고 그나마

이 명 LoC 같은 통계에 대해 신경 :

4

필요한만큼 필요합니다.

함수 줄 수를 화면 크기로 제한하는 데 아무런 문제가 없습니다. (괜찮 았는지, 화면이 10-20 줄을 넘을 때까지 프로그래밍을 시작하지 않았습니다. 일부 환경에서는). 그냥 이해할 수있는대로 함수를 작성하십시오. 코드 조각이 너무 커지면 코드 조각이 반복되기 시작하여 조각을 다른 함수/클래스/구성 요소로 리팩토링합니다.

2

엄청난 규칙입니다. 일부는 20 줄을 좋아하고 다른 하나는 스크롤 금지 규칙을 좋아합니다. 결국에는 읽기 쉽고 한 눈에 쉽게 이해할 수 있습니다. SOLID principles을 읽고 방법에 단 하나의 책임이 있는지 확인하십시오.

0

효율성이있는 한 얼마나 많은 줄이 있는지는 중요하지 않다고 생각합니다.

코드베이스의 어느 곳에서나 재사용 할 수있는 코드는 동일한 클래스 나 공유 클래스의 다른 함수/메소드로 이동하여 호출해야합니다.

+0

크기는 중요합니다. 가독성은 매우 중요하며, 텍스트 벽면에 직면 할 때 우리는 프로그래머 (모두 효율적 임)가 기능에 대해 유약을 내고 있습니다. 나도 알아, 우리 모두는 우리가하지 못하는 척하는 걸 좋아하지만, 그렇지. – corsiKa

+0

더 많은 기능을 만들지 않고도 코드를 읽을 수 있습니다. –

0

전에도 화면 크기 메트릭에 대해 들었지만 너무 엄격하게 제한하거나 모니터 크기에 맞게 조정하지는 않았습니다. DRY의 원칙을 전달하기위한 것이며 가능한 한 작게 기능을 유지하는 것이 (프로젝트 크기로) 확장 할 수있는 코드를 작성하는 가장 좋은 방법 중 하나입니다.

+0

함수의 아무 부분도 다른 곳에서 사용된다고 가정합니다. 즉, DRY 원칙을 무시합니다. DRY 원칙에 관한 질문을 변경했습니다. – hIpPy

+0

기능의 일부는 오늘 다른 곳에서는 사용할 수 없지만 내일이나 내년은 어떻게됩니까? 코드로 돌아와 해당 기능을 사용해야 할 경우 자체 기능으로 쉽게 사용할 수 있습니까? 아니면 기존 기능에서 제거해야합니까? 이 시점에 도달하면 작업이 너무 많아 지거나 이전 기능을 다시 고려하지 못하게 될 수도 있으므로 원하는 부분 만 복사하면됩니다. 이것은 DRY가 위반되는 주요 방법입니다. 여분의 기능이나 수업을 만드는 것은 매우 드물지만 후회할 때가 많습니다. – bshields

17

라인은 관련이 없지만 복잡합니다.

함수는 하나의 작업을 수행해야하며 쉽게 알 수 있어야합니다. 함수가하는 일과 방법을 정확하게 이해하는 데는 몇 분이 넘는 시간이 필요하지 않습니다.

+3

아직 최선의 대답은 ... – fasseg

+2

내 경험상 "컨트롤러"또는 "메인 루프"는 단일 목적 함수보다 약간 더 복잡 할 수 있습니다. 어쩌면 내가 잘못하고있는 것일 수도 있습니다 ... 나는 일반적으로 당신의 의견에 동의하지만 항상 예외가 있다고 생각한다. – blissapp

+2

@blissapp : 글쎄, 항상 명백한 예외가있다;) – FrustratedWithFormsDesigner

1

가능한 한 짧아야합니다.

엄지 손가락으로 5-10 선을 사용하지만 여러 기능에 쉽게 다시 추가 할 수없는 논리가있는 경우 필요한 경우 더 오래 쓸 수 있습니다. 반면에 저는 종종 한 줄 또는 두 줄의 기능을 가지고 있습니다.

immedatly 코드의 일부분을 이해하지 못하는 경우 새로운 기능을 작성하십시오.

0

리눅스 커널 코딩 스타일 문서는 말한다 :

기능이 short and sweet하여야하며, 하나의 일을해야한다. 그들은 (우리 모두가 알고있는 으로 ISO/ANSI 화면 크기는 80x24입니다.) 한두 가지 텍스트에 맞게 을 맞춰야하며, 한 가지만 수행하면 잘 수행됩니다.

이제는 이것이 커널 코드의 컨텍스트에서 발생한다는 것을 알았지 만, 기능적 길이는 일반적으로 유효하다고 생각합니다. 복사본 here 찾기 함수에 대한 섹션은 4 장입니다.

모두 함수 길이는 몇 가지 인공적인 규칙에 의해 제한되어서는 안됩니다. 요소를 추출하는 것은 의미가 있고, 읽기 쉽도록 만들기 때문에, 1-2 화면에 관한 규칙은 돌로 쓰여지지 않습니다.

0

이것은 OO-관점에서 단지 의견입니다. 이렇게하면 메서드 이름을 올바르게 지정하기가 쉽고 부 풀리지 않게됩니다.

매우 간단한 함수 예제는 피보나치 시퀀스를 루프에서 인라인으로 계산하는 함수 대신 fibonacci() 함수에 의해 호출되는 후미 (int a, int b) 함수를 추가하는 함수가 될 것입니다.

더 복잡한 예는 GET 요청을 수행하는 HTTP 클라이언트입니다. 나는 이것을 다음과 같이 분해 할 것이다.

Connection getConnection(String host, int port) 
Request createRequest(String[] params) 
void sendRequest(Request r) 
String getResponse(Connection c,Request r) 
0

기능은 작지만 기능은 작아야한다.