En JavaScript, ¿la devolución de una declaración de cambio se considera una práctica mejor que el uso de break?



Answers

Depende, si su función solo consiste en la declaración de cambio, 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. También es posible que tenga que considerar sus necesidades ahora mismo en lugar de 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 sentencias if / else, es una buena práctica hacer lo siguiente:

var foo = "bar";

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

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

En resumen, no hay una respuesta clara, por lo que siempre que su código se adhiera a un estándar consistente, legible y mantenible, es decir, no mezcle y combine las opciones una y dos en su aplicación, esa es la mejor práctica que debería siguiendo.

Question

Opción 1 - cambiar usando return:

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

        default: return "";
    }    
}

Opción 2 - cambiar usando break:

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 ambos funcionan, pero ¿es una mejor práctica? Tiendo a gustarme la Opción 1 - cambiar usando devolver mejor, ya que es más limpio y simple.

Aquí hay 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 de las siguientes maneras:

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 el valor real del objeto literal y no la propiedad. ¿Qué haría para arreglar esto usando la técnica descrita en los comentarios de @ ic3b3rg ?




Related