2014-07-21 3 views
4

다음 코드를 작성하는 최선의 방법을 찾고 있습니다.루프 조건 검사를 기반으로

if (condition == true) 
for (i = 0; i < 200; i++) 
{ 
/// 600 lines of code 
} 

else 
for (i = 200; i > 0; i--) 
{ 
/// same 600 lines of code as in above condition check 
} 

지금까지 동일한 루프 내에서 동일한 코드가 복사되었습니다. 그러나 수표를 작성한 다음 코드를 한 번만 표시하는 방법이 있습니까? 조건 검사에 의존하는 유일한 방법은 루프가 작동하는 방식입니다. 조건 체크에 따라 루프에서 앞으로 또는 뒤로 이동해야하며 같은 600 행의 코드를 두 번 붙여 넣기를 원하지는 않습니다. 나는 이것을 C로 쓰고있다.

+0

원하는 것은 "서브 루틴"또는 "함수"입니다. – pamphlet

+0

코드를 복사 할 때마다 나쁜 습관이 생깁니다. 여러 곳에서 필요한 것이 있다면 별도의 기능이되어야합니다. 이를 "캡슐화"라고합니다. 복사하는 600 줄이라는 사실은 내가 누락 된 코드를 더 잘 캡슐화 할 수있는 몇 가지 기회가 있다고 생각하게 만듭니다. – pamphlet

+0

당신을 ... 감사합니다 – marc1886

답변

1

루프 변수가 약간 다른 두 개의 루프 대신에 조건에 따라 루프 변수를 변경하여 효과적으로 0에서 200까지 또는 200에서 0까지 계산할 수있다.

for (iteration = 0; iteration < max; iteration++) 
{ 
    index = (condition == true) ? iteration : max-iteration; 
    // 600 lines of code, using index 
} 

다른 사람 (나, 나중에)이 무엇을해야하는지 알기 위해 의견을 추가 할 수 있습니다.

그러나, 심지어 그때는 아마 별도의 방법에 코드의 그 600 선을 리팩토링을 시도해야 - 또는 오히려 여러 별도의 방법, 그 600 개 라인을 각각 처리 한 측면. 경험적으로 말하자면, i) 코드가 600 회선이든 10 회선이든 관계없이 코드를 반복 할 때마다 메소드를 만들려고합니다. 그리고 ii) 코드 길이가 실제로 길어질 때마다 이 아닐지라도 여러 번 반복하여 여러 가지 방법으로 나누십시오. 이렇게하면 코드를 좀 더 자급 자족적이고 유지 보수하기가 훨씬 쉬워집니다.

그 600 라인이 루프 밖에서 선언 된 많은 변수들을 액세스하고 수정한다면, 이것 자체가 디자인의 또 다른 결함이 될 수도 있습니다 ...

+0

.......... Argh. – Quentin

+0

@Quentin "Argh"에서와 같이 "Argh, 왜 내가 그걸 생각하지 않았습니까?"또는 "Argh, My eyes!"와 같이? –

+0

후자입니다. 그러나, 두 번째 생각에, 컴파일러는 아마 당신의 색인을 열정적으로, 그러나 여전히 최적화 할 것이다. – Quentin