1

을 공유 할당으로 결합하고 case을 공유하지 않는 할당에 대해 반복하거나 각 구분을 유지하는 것이 좋습니다. 간단한 예로 설명하기switch 문에서 사례 및 중복 사례 처리하기


... case 0180 모두 때문에 결합 된 w = 330 포함한다; x에 할당 된 값은 각각 다르므로 x 할당을 수행하기 위해 반복됩니다. 당신이 그랬던 것처럼 ... 실수의 가능성이 너무 높은 -

switch(window.orientation) { 
    case 0: 
    case 180: 
     w = 330; 
     //break 
    case 0: 
     x = '-180px'; 
     //break 
    case -90: 
    case 90: 
     w = 480; 
     x = '0'; 
     break; 
    case 180: 
     x = '-80px'; 
     break; 
} 
+0

대소 문자가 0이고 대소 문자가 180 인 경우 x 값이 다를 수 있습니다 (분기가 동일 할 수도 있음). 가독성/나중의 유지 보수 용이성으로 인해 사례를 결합하지 않을 것입니다. – Will

답변

3

그것이 switch 성명에서 요소마다 하나 개 이상의 작업을 수행하는 올 때, 그것은 두 번 같은 case를 반복하지하는 것이 좋습니다. case 아래에있는 코드 조각을 모두 합하면 쉽게 얻을 수 있습니다. 당신이 case 0case 1case 0 및 운영 B에 작업 A을 수행하려는 경우

예를 들어, 다음과 같이해야합니다 :

switch(variable) { 
    case 0: 
     // operation A; 
    case 1: 
     // operation B; 
     break; 
} 

case 0에 모두 작동 AB를 실행합니다 때문에 case 0에는 break이 없습니다. 위의 코드는 변수 x에 값 1을 할당 종료됩니다

switch(variable) { 
    case 1: 
     x = 1; 
     break; 
    case 1: 
     x = 2; 
     break; 
} 

:

는 이제 가정하자이 같은 물품. 첫 번째 case 1break 문 때문에 x = 2을 나타내는 두 번째 case 1에 도달하지 않습니다. 당신이 case 0case 1에 다른 작업을 수행하지만, 몇 가지 작업을 공유 할 수있어 한 경우이 코드를 읽기 쉽고 만들기 때문에

그래서, 즉, 경우 몇 줄의 코드를 반복하는 대신 두 번 case 1를 작성을 분리하는 것이 좋습니다 약간 더 빠릅니다.

그래서 코드에서, 가장 좋은 방법은 당신이 원하는 것은 이쪽 달성하기 :

switch(window.orientation) { 
    case 0: 
     x = '-180px'; 
     w = 330; 
     break; 
    case 180: 
     x = '-80px'; 
     w = 330; 
     break; 
    case -90: 
    case 90: 
     w = 480; 
     x = '0'; 
     break; 
} 
1

나는 결합하지 말 것. 두 번째 case 180은 첫 번째 메시지 뒤에 break;이 있기 때문에 절대 도달하지 않습니다.

모든 것이 같으면 결합하는 것이 좋습니다 (-90, 90처럼).

-1

작동하지 않습니다. 브레이크 명령이 실행 되 자마자 스위치 블록의 나머지 코드는 실행되지 않습니다. 이 같은 문제를 해결할 수 :

switch(window.orientation) { 
    case 0: 
    case 180: 
     w = 330; 
    case 0: 
     x = '-180px'; 
     break; 
    case 180: 
     x = '-80px'; 
     break; 
    case -90: 
    case 90: 
     w = 480; 
     x = '0'; 
     break; 
    } 
+2

위의 두 번째'case 0'과'case 180'은 절대적으로 아무것도하지 않습니다. –

0

당신은 당신이 다음과 같은 여러 스위치 케이스를 결합 할 경우 사소한 오류 를보고 Coverity 같은 정적 분석 도구를 실행합니다.

case -90: 
    // Intentionally fall through 
    case 90: 
     w = 480; 
     x = '0'; 
     break; 

일부 원하지 않는 오류를내는 것보다 코드 행을 반복하는 것이 좋습니다.

 case -90: 
      w = 480; 
      x = '0'; 
      break; 
     case 90: 
      w = 480; 
      x = '0'; 
      break;