스위치 구문 : 나는 그들이 무엇을하는지 압니다. 일반적으로 컨벤션마다 열거 형의 값에 따라 다른 작업을 수행하려고 할 때 여러 번 사용합니다. 그러나 지금은 단지 나를 때렸습니다 : 왜 우리가 사용하고 있습니까? ?원래 목적은 무엇입니까? 나는이 의미 :`switch` 문은 무엇입니까?
switch(myVar) {
case Foo:
doSomething();
break;
case Bar:
doSomethingElse();
break;
default:
justAnotherThing();
break;
}
는 다음과 같이 동일한 동작을 가지고 :
if(myVar == Foo) {
doSomething()
}else if(myVar == Bar) {
doSomethingElse();
}else {
justAnotherThing();
}
플러스 if
의 당신이 할 수 있습니다 불평등의 비교는 (>
, <
, !=
) 당신이 그것을 필요로하는 경우에. 더 유용한 스위치를 찾을 수있는 유일한 경우는 내부에 break
문을 사용하지 않는 경우입니다. 그러나 너무 자주 발생하지는 않습니다. 코드 품질이 매우 낮습니다.
switch
을 (를) 통해 if
을 (를) 사용하면 얻을 수있는 이점을 찾을 수 없습니다. 왜 그렇습니까?
이제 10 개의 대안 또는 20 개가있는 'if-else if' 체인을 실행하면 그다지 읽을 수 없습니다. 또한 컴파일러는 "일치"를 찾을 때까지 각 조건을 평가할 필요없이 단순한 점프 테이블로 '스위치'를 최적화 할 수 있습니다. 그리고 C와 유사한 언어 (기본 언어로 사용하는 것 같습니다)의 경우 * 중단이 없다면 아래의 다음 사례로 넘어갑니다. 그것은 if-else if 체인에서하는 것이 훨씬 더 어렵습니다. –
읽기 능력에 관해서는 거의 동일하다고 생각합니다. 일관된 식별자를 유지하고'switch'를 사용할 경우'if-else if'를 사용하면'else else if (myVar =='항상 같은 공간을 사용하여 모든 가능한 값을 정렬하고 읽기 쉽도록합니다.) – olivarra1
그리고 제 질문으로는 'break'를 제거하여 fall-through 동작을 언급했지만 읽기 쉽도록 끔찍합니다. 다음 경우로 넘어갈 수도 있고 그렇지 않을 수도있는 경우와 경우의 순서를 변경하는 것은 동작에 영향을 미칩니다. 나는이 "트릭"을 사용하여 스위치에 대한 비교를 수행하고 그렇지 않으면 피하기 위해 노력합니다. – olivarra1