В JavaScript считается ли возврат из оператора switch лучшей практикой, чем использование break? - PullRequest
176 голосов
/ 24 мая 2011

Опция 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, поскольку он чище и проще.


Вот jsFiddle моего конкретного примера с использованием техники, упомянутой в @Комментарии ic3b3rg :

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 комментариях ?

Ответы [ 2 ]

225 голосов
/ 24 мая 2011

Перерыв позволит вам продолжить обработку в функции. Просто вернуться из коммутатора - это нормально, если это все, что вы хотите сделать в функции.

8 голосов
/ 24 мая 2011

Зависит от того, что если ваша функция состоит только из оператора switch, то я думаю, что это нормально. Однако, если вы хотите выполнить какие-либо другие операции внутри этой функции, это, вероятно, не очень хорошая идея. Вам также, возможно, придется рассмотреть ваши требования прямо сейчас, а не в будущем. Если вы хотите изменить свою функцию с первого варианта на второй, потребуется больше рефакторинга.

Однако, учитывая, что в операторах if / else лучше всего делать следующее:

var foo = "bar";

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

Исходя из этого, можно утверждать, что первый вариант - лучшая практика.

Короче говоря, нет четкого ответа, так как пока ваш код придерживается непротиворечивого, читабельного, поддерживаемого стандарта - то есть не смешивайте и не сочетайте варианты один и два в вашем приложении, это лучшая практика Вы должны следовать.

...