2014-04-30 4 views
0

아래 코드는 내 코드에 있습니다.최적화 스위치 케이스 코드

switch(condition) 
     case 'A' : 
     //Code part A 
     break; 
     case 'B' : 
     //Code part A 
     //Code part B 
     break; 
     case 'C' : //Some code 
     break; 

코드 파트 A는 사례 'A'와 사례 'B'모두에서 반복됩니다. 나는 코드의 중복을 피하고 싶다.

우리는 fall를 사용하지만 case B에 대한 if 조건을 추가해야합니다. 이것이 코드의 반복을 피하는 유일한 방법입니까?

+2

함수를 사용 하시겠습니까? –

답변

4

, 당신은 간단하게 수행 할 수 있습니다

switch (condition) 
{ 
    case 'B': 
     // Code part B 
     // no break 
    case 'A': 
     // Code part A 
     break; 
    ... 
} 

case 'B' 당신이 break를 호출하지 않았기 때문에 case 'A' 코드를 실행하는 것입니다.

+0

파트 A와 B의 순서가 중요하지 않으면이 작동합니다 –

3

불행히도, 그 유일한 방법은 partA에 대한 함수를 정의하는 것입니다. 이것은 당신의 파트 A와 파트 B 코드가 중첩의 동일한 수준을 가지고 있습니다

switch (someValue) { 
    case 'A': 
    case 'B': 
     // Code part A 
     if (someValue == 'A') break; 
     // Code part B 
     break; 
    case 'C': 
     break; 
} 

:

당신은 코드가 좀 더 균일하게 보이게하기 위해 결합 된 case 라벨 내부에서 switch를 종료하여 중첩을 줄일 수 있습니다 .

+0

추악한,하지만 가장 못생긴 대안 수 있습니다 :) –

0

"// 코드 부분 A"보다 먼저 "코드 부분 B"를 실행할 수 있습니까? 그렇다면, 당신은 그것들을 재정렬 할 수 있고 if 조건없이 빠져 나갈 수 있습니다.

그렇지 않으면 할 일이별로 없다고 생각합니다. 객체 지향 언어를 만드는 이유 중 하나는 명령형 언어로 작성된 코드의 중복을 피하는 것이 었습니다. 순서가 중요하지 않은 경우

4

코드 복제를 줄이려면 switch 문을 조작해야하지만 나중에 스위치에 사례를 추가하여 해당 최적화의 청결성을 떨어 뜨릴 수 있습니다. 예 :

switch(condition) 

     case 'A' : 
     // Code part A 
     break; 

     case 'B' : 
     // Code part A 
     // Code part B 
     break; 

     case 'C' : 
     // Code part C 
     break; 

     case 'D' : 
     // Code part A 
     // Code part D 
     break; 

갑자기 최적화가 어려워지고 유지하기가 어려워지고 읽기가 어렵고 오류가 발생하기 쉽습니다.

공통 코드가 있음을 이미 확인 했으므로 내 생각에 가장 명확한 응답은 공통 코드를 수행하고 각 사례에서 호출하는 함수를 작성하는 것입니다. 앞으로도 계속 유지할 수 있습니다.