JavaScript에서 break 문을 사용하는 것보다 switch 문을 반환하는 것이 더 나은 방법으로 간주됩니까?


198

옵션 1-리턴을 사용하여 전환 :

function myFunction(opt) 
{
    switch (opt) 
    {
        case 1: return "One";
        case 2: return "Two";
        case 3: return "Three";

        default: return "";
    }    
}

옵션 2-중단을 사용하여 전환 :

function myFunction(opt) 
{
    var retVal = "";

    switch (opt) 
    {
        case 1: 
            retVal = "One";
            break;

        case 2: 
            retVal = "Two";
            break;

        case 3: 
            retVal = "Three";
            break;
    }

    return retVal;
}

나는 두 가지가 모두 작동한다는 것을 알고 있지만 가장 좋은 방법 중 하나입니까? 나는 옵션 1을 선호하는 경향이 있습니다-더 깨끗하고 간단하기 때문에 return return을 사용하십시오.


다음은 @ ic3b3rg의 의견에 언급 된 기술을 사용하는 특정 예제의 jsFiddle입니다 .

var SFAIC = {};

SFAIC.common = 
{
    masterPages: 
    {
        cs: "CS_",
        cp: "CP_"
    },

    contentPages: 
    {
        cs: "CSContent_",
        cp: "CPContent_"    
    }
};

function getElementPrefix(page) 
{
    return (page in SFAIC.common.masterPages)
        ? SFAIC.common.masterPages[page]
        : (page in SFAIC.common.contentPages)
            ? SFAIC.common.contentPages[page]
            : undefined;
}

함수를 호출하려면 다음과 같은 방법으로 수행하십시오.

getElementPrefix(SFAIC.common.masterPages.cs);
getElementPrefix(SFAIC.common.masterPages.cp);
getElementPrefix(SFAIC.common.contentPages.cs);
getElementPrefix(SFAIC.common.contentPages.cp);

여기서 문제는 항상 정의되지 않은 값을 반환한다는 것입니다. 속성이 아닌 객체 리터럴의 실제 값을 전달하기 때문이라고 생각합니다. @ ic3b3rg의 의견에 설명 된 기술을 사용 하여이 문제를 해결하려면 어떻게해야 합니까?


4
+1 좋은 질문입니다. 나는 이것을 스스로 궁금해했고, 그것이 돌아 오는 것이 효과가 있다는 것을 알고는 있지만 그것이 최선의 방법인지는 모른다. 커뮤니티가 어떻게 생각하는지 궁금합니다.
Eli

답변:


266

중단하면 함수에서 계속 처리 할 수 ​​있습니다. 그것이 기능에서하고 싶은 모든 것이라면 스위치에서 나가는 것이 좋습니다.


6
내 질문에 예를 들어 대답은 '예'입니다. 그러나 계속 진행해야 할 기능이 있다면 분명히 브레이크가 사용됩니다.
Code Maverick

9
@Mark Costello의 답변으로 귀하의 질문에 대해 조금 더 감사드립니다. 일반적인 '모범 사례'가이드 라인을 찾고 있다고 생각하지만 구체적인 예를 들면 다음과 같습니다 return {1:"One",2:"Two,3:"Three"}[opt];. 기본값이 필요한 경우var o={1:"One",2:"Two,3:"Three"}; return opt in o?o[opt]:"";
ic3b3rg

@ ic3b3rg-의 기술을 활용하려는 특정 예제로 내 질문을 편집 return (opt in o) ? o[opt] : "";했지만 항상 특정 경우 기본값을 반환합니다.
Code Maverick

내 코드에 오타가 있었지만 ( 2 번째 ""Two"var o={1:"One",2:"Two",3:"Three"},opt=2; alert(opt in o?o[opt]:"");
놓치다)

나는 당신의 예제를 사용하지 않고 단지 기술을 사용했습니다. 내 질문을보고 내 jsFiddle에 대한 링크를 클릭하여 내가 말하는 내용을 확인하십시오.
Code Maverick

9

그것은 당신의 함수가 switch 문으로 만 구성되어 있다면 그것이 좋다고 생각합니다. 그러나 해당 기능 내에서 다른 작업을 수행하려는 경우 좋은 생각이 아닙니다. 또한 현재와 미래의 요구 사항을 고려해야 할 수도 있습니다. 기능을 옵션 1에서 옵션 2로 변경하려면 더 많은 리팩토링이 필요합니다.

그러나 if / else 문 내에서 다음을 수행하는 것이 가장 좋습니다.

var foo = "bar";

if(foo == "bar") {
    return 0;
}
else {
    return 100;
}

이를 바탕으로 옵션 1을 사용하는 것이 더 좋습니다.

요컨대, 코드가 일관되고 읽기 쉽고 유지 관리 가능한 표준을 준수하는 한, 즉 응용 프로그램 전체에서 옵션 1과 2를 혼합하여 일치시키지 않는 것이 가장 좋습니다. 수행원.


2
이 예에서 가장 좋은 방법은return foo == "bar";
ic3b3rg

10
: 나는 성가신 해요 경우가 있지만, 그 경우에 나는 아직도 단순화 것 사과 return foo == "bar" ? 0 : 100;또는 return [100,0][foo == "bar"];.
ic3b3rg

4
@ ic3b3rg-그렇지 않아야합니다 : return [100,0][+(foo == "bar")]; ?

3
@Queue 부울을 정수로 변환해야한다는 것이 맞지만, 다음과 같이하면됩니다 :return [100,0][foo == "bar" & 1];
ic3b3rg

7
@ ic3b3rg && Queue-그러한 속임수를 사용하여 다른 사람의 코드를 어떻게 유지 하시겠습니까? (프리 컴파일러를 사용하여 속도를 최적화하십시오)
T4NK3R
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.