En JavaScript, ¿se considera que regresar de una instrucción switch es una mejor práctica que usar break?


Opción 1-cambiar usando retorno:

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

        default: return "";
    }    
}

Opción 2-interruptor usando rotura:

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

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

        case 2: 
            retVal = "Two";
            break;

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

    return retVal;
}

Sé que ambas funcionan, pero ¿es una más de las mejores prácticas? Tiendo a gustar la opción 1-cambiar usando retorno mejor, ya que es más limpio y más simple.


Aquí está un jsFiddle de mi ejemplo específico usando la técnica mencionada en los comentarios 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;
}

Para llamar a la función, lo haría en la siguiente formas:

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

El problema aquí es que siempre devuelve indefinido. Supongo que es porque está pasando en el valor real del objeto literal y no la propiedad. ¿Qué haría para arreglar esto usando la técnica descrita en@ic3b3rg comentarios?

Author: Code Maverick, 2011-05-24

2 answers

Un break le permitirá continuar procesando en la función. Solo regresar del interruptor está bien si eso es todo lo que quieres hacer en la función.

 185
Author: ic3b3rg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-24 17:13:45

Depende, si su función solo consiste en la instrucción switch, entonces creo que está bien. Sin embargo, si desea realizar cualquier otra operación dentro de esa función, probablemente no sea una gran idea. Usted también tendrá que considerar sus necesidades ahora en comparación con en el futuro. Si desea cambiar su función de la opción uno a la opción dos, se necesitará más refactorización.

Sin embargo, dado que dentro de las declaraciones if/else es la mejor práctica para hacer el siguiente:

var foo = "bar";

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

Sobre la base de esto, se podría argumentar que la opción uno es una mejor práctica.

En resumen, no hay una respuesta clara, así que mientras su código se adhiera a un estándar consistente, legible y mantenible, es decir, no mezcle y combine las opciones uno y dos en toda su aplicación, esa es la mejor práctica que debe seguir.

 7
Author: Mark Costello,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-24 17:33:33