web-dev-qa-db-fra.com

En JavaScript, le retour d'une instruction switch est-il considéré comme une meilleure pratique que d'utiliser break?

Option 1 - changer en utilisant return:

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

        default: return "";
    }    
}

Option 2 - Commutateur utilisant la pause:

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

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

        case 2: 
            retVal = "Two";
            break;

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

    return retVal;
}

Je sais que les deux fonctionnent, mais est-ce une meilleure pratique? J'ai tendance à aimer l'option 1 - utiliser le retour mieux, car c'est plus propre et plus simple.


Voici un jsFiddle de mon exemple spécifique utilisant la technique mentionnée dans les commentaires de @ 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;
}

Pour appeler la fonction, je le ferais de la manière suivante:

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

Le problème ici est qu'il retourne toujours indéfini. J'imagine que c'est parce qu'il transmet la valeur réelle du littéral d'objet et non la propriété. Que ferais-je pour résoudre ce problème en utilisant la technique décrite dans les commentaires de @ ic3b3rg ?

179
Code Maverick

Une pause vous permettra de continuer le traitement dans la fonction. Il suffit de rentrer du commutateur si c'est tout ce que vous voulez faire dans la fonction.

230
ic3b3rg

Cela dépend, si votre fonction consiste uniquement en une instruction switch, alors je pense que c'est bien. Toutefois, si vous souhaitez effectuer d'autres opérations dans cette fonction, ce n'est probablement pas une bonne idée. Vous devrez peut-être également tenir compte de vos besoins actuels plutôt que futurs. Si vous souhaitez modifier votre fonction d’option 1 à option 2, une refactorisation plus poussée sera nécessaire.

Toutefois, étant donné que dans les déclarations if/else, il est recommandé de procéder comme suit:

var foo = "bar";

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

Sur cette base, on pourrait argumenter que la première option est la meilleure pratique.

En bref, il n’ya pas de réponse claire. Aussi longtemps que votre code respecte une norme cohérente, lisible et maintenable, c’est-à-dire que vous ne devez pas associer les options 1 et 2 de votre application, c’est la meilleure pratique à adopter. Suivant.

8
Mark Costello