Opção 1 - alternar usando retorno:
function myFunction(opt)
{
switch (opt)
{
case 1: return "One";
case 2: return "Two";
case 3: return "Three";
default: return "";
}
}
Opção 2 - alternar 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;
}
Sei que os dois funcionam, mas é mais uma das melhores práticas? Costumo gostar da opção 1 - alternar usando o retorno melhor, pois é mais limpo e mais simples.
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 chamar a função, eu o faria das seguintes maneiras:
getElementPrefix(SFAIC.common.masterPages.cs);
getElementPrefix(SFAIC.common.masterPages.cp);
getElementPrefix(SFAIC.common.contentPages.cs);
getElementPrefix(SFAIC.common.contentPages.cp);
O problema aqui é que ele sempre retorna indefinido. Eu estou supondo que é porque está passando o valor real do objeto literal e não a propriedade. O que eu faria para corrigir isso usando a técnica descrita nos comentários de @ ic3b3rg ?
javascript
return
switch-statement
break
Code Maverick
fonte
fonte
Respostas:
Uma pausa permitirá que você continue processando na função. Retornar da opção é bom se é tudo o que você deseja fazer na função.
fonte
return {1:"One",2:"Two,3:"Three"}[opt];
. Se você precisa do padrão, então seriavar o={1:"One",2:"Two,3:"Three"}; return opt in o?o[opt]:"";
return (opt in o) ? o[opt] : "";
, mas ela sempre retorna o padrão no meu caso específico."
em"Two"
), mas ele trabalha para mim ... aqui está um teste simples:var o={1:"One",2:"Two",3:"Three"},opt=2; alert(opt in o?o[opt]:"");
Depende, se sua função consiste apenas na instrução switch, então acho que está tudo bem. No entanto, se você deseja executar outras operações nessa função, provavelmente não é uma ótima idéia. Você também pode ter que considerar seus requisitos agora e no futuro. Se você deseja alterar sua função da opção um para a opção dois, será necessária mais refatoração.
No entanto, considerando que nas declarações if / else, é uma prática recomendada fazer o seguinte:
Com base nisso, pode-se argumentar que a opção 1 é a melhor prática.
Em resumo, não há uma resposta clara, desde que seu código adote um padrão consistente, legível e de manutenção - ou seja, não misture e combine as opções um e dois em todo o aplicativo, essa é a melhor prática a ser adotada. Segue.
fonte
return foo == "bar";
return foo == "bar" ? 0 : 100;
ou atéreturn [100,0][foo == "bar"];
.return [100,0][+(foo == "bar")];
:?return [100,0][foo == "bar" & 1];