2012-03-28 4 views
2

주 기능이있는 경우 10K 회선을 말하십시오. 2.5k 라인의 4 가지 기능을 사용하면 속도가 느려질 것입니까? 또는 함수는 코드 선명도 등의 미적 이유로 만 사용할 수 있습니까?빅 사이즈 메인 프로그램을 느리게 만들려고?

+3

본질적으로는 아니지만 메타 추론은 10k-loc 함수를 작성하는 사람이 아마도 최고 품질의 코드를 작성하지 않았을 것이라고 제안합니다. –

+0

[Atomiq] (http://getatomiq.com/)과 같은 도구를 실행하고 해당 대형 기능에 얼마나 많은 DRY 위반이 있는지 파악하는 것이 흥미로울 수 있습니다. – Tod

답변

12

하나의 함수는 오버 헤드를 호출하는 함수를 가지지 않습니다. 이것은 현대 하드웨어에서는 극도로 작지만 4 개의 함수를 갖는 솔루션은 함수 호출 불이익을 초래합니다.

그러나 코드를 유지 관리하는 사람은 당신을 사냥하여 10K 회선 기능 하나 또는 2.5K 회선 기능 4 개 중 하나를 가지고 당신을 죽일 것입니다.

기능은 가정된다 :

  • 가 하나의 작업 단위를 수행하고 하나의 책임이있다;
  • 코드 반복 반복;
  • 모듈화 코드.

동일한 10K 줄 중 동일한 줄을 몇 번이고 복사하여 붙여 넣을 수 있습니까?

+2

+1. 우리 팀이 13 개의'goto's가있는 5K 줄의'main' 프로그램을 가속화 할 과제가있을 때 나는 내 마음 속에서 살인을 당했다는 것을 안다. 코드가 너무 부서지기 쉽기 때문에 수정할 모든 시도가 그것을 깨뜨릴 수 있습니다. 정확성, 유지 보수성, 속도에 대한 코드는 어딘가에 있습니다. –

5

코드가 너무 우스꽝스럽게 뒤 엉켜 끔찍해지기 때문에 코드를 실행하는 데 시간이 걸릴 것입니다.

0

큰 건물을 짓고 싶은 시나리오를 상상해보십시오. 전체 작업을 혼자서해야합니다 ... 당신이하고있는 일을 쉽게 알 수 있습니다. 하지만 건물에서 일하는 것을 그만두고 다른 사람이 그 일을하도록 임명되면 ... 그는 지옥에있을 것입니다 ...

마찬가지로 일을 혼자하는 것만으로도 충분한 시간을 가질 수 있습니다. 귀하의 그룹에 새로운 회원을 임명하고 그들이 당신을 위해 일하게하십시오 ...

기능을 사용하여, 당신의 코드는 읽기 쉽고, 유지 보수가 가능하며, 더 작은 크기의 컴파일 된 것을 만들 수 있습니다. exe.

언제나 그렇듯이 모듈에서 동일한 코드를 여러 번 다시 작성하는 대신 동일한 함수를 반복하여 호출 할 수 있습니다.

3

당신은 당신에게 리눅스 커널 코딩 스타일에서이 조언을하게해야합니다.

"함수는 short and sweet하여야하며, 하나의 일을해야을 그들은해야 텍스트 중 하나 또는 두 개의 screenfuls에 적합합니다 (ISO/ANSI 화면 크기는 80x24이고, 우리 모두가 알고 있듯이 입니다.) 한 가지 일을 잘 해내십시오. "

http://www.kernel.org/doc/Documentation/CodingStyle

+0

+1 내 모든 코딩의 기준으로 해당 문서를 사용합니다. – Morpfh

0

이 달려있다. 이론 상으로는 모든 코드를 단일 함수로두면 함수 호출 오버 헤드가 줄어 듭니다. 알맞게 작성된 코드를 가진 최신 프로세서에서는 보통 시작하기에 꽤 낮습니다.

다른 방향으로 보면 크기가 작은 단일 기능으로 인해 캐시가 상대적으로 사용되지 않을 가능성이 상당히 높습니다. 함수 호출 오버 헤드와 달리 캐시 사용은 자주 입니다. 주기억 장치에 대한 참조는 일반적으로 캐시에 대한 참조보다 적어도 15-20 배 더 느릴 수 있으므로 캐시 사용이 상당히 적어 지더라도 속도가 상당히 향상 될 수 있습니다.

둘 사이의 불균형을 감안할 때, 더 세밀한 인수 분해를 통해 더 작은 함수로 분해하면 속도가 향상 될 가능성이 큽니다.