Para fazermos escolhas na linguagem JS, utilizamos o comando switch que possui sua
sintaxe e fluxograma apresentados abaixo. O comando switch utiliza o comando break
como parte de sua sintaxe.
Fig. 5: Fluxograma Comando switch
 |
Sintaxe
switch(valor)
{
case caso1:
//código
break;
case caso2:
//código
break;
default:
//código
break;
}
Quando o switch é executado, o valor é comparado sequencialmente a todos os valores
contidos nas cláusulas case até que a comparação seja verdadeira e o trecho de código é executado.
O case default é executado caso nenhum case testado seja verdadeiro. O uso do case default
não é obrigatório, mas por boas práticas deve ser usado para verificação de erros.
Exemplo 1: valor como argumento
let valor = 1;
switch(valor)
{
case 1: console.log(1); break;
case 3: console.log(2); break;
default: console.log("invalido"); break;
}
Saída
1
Exemplo 1.1: função como argumento
function funcao(parametro){
return 1 //
}
switch(funcao(2))
{
case 0: console.log("0"); break
case 1: console.log("1"); break
case 2: console.log("2"); break
default: console.log("invalido"); break
}
Saída
1
switch com múltiplos cases
Para a execução de um mesmo trecho de código para mais de uma caso, basta adicionar as cláusulas
case em sequência ou um abaixo do outra separadas por (:).
Exemplo 2
let valor = 1;
switch(valor)
{
case 1:
case 3: console.log(2); break;
default: console.log("invalido"); break;
}
Saída
2
O comando switch pode também ser utilizando com o tipo de dado string como valores de comparação
contidos nos cases:
Exemplo 3
let valor = "str2";
switch(valor)
{
case "str1": console.log(valor); break;
case 'str2': console.log(valor); break;
default: console.log("invalido"); break;
}
Saída
str2
Não há um tipo de dado char na linguagem JS. Sendo assim, uma string de um caracter pode ser
utilizada nos cases do switch.
O comando switch pode também ser utilizando com o tipo de dado objeto, contanto que o atributo
utilizado pelo comando seja do tipo numérico ou string como no exemplo abaixo:
Exemplo 4
let obj = { campo: 2 , desc: "string"};
switch(obj.campo)
{
case 1: console.log(obj.campo); break;
case 2: console.log(obj.desc); break;
default: console.log("invalido"); break;
}
Saída
string
Como JS não possui suporte a enums, vamos utilizar um objeto e o método freeze de
Object para simular os membros de um enum. Dessa forma, podemos usar esse objeto
nos cases do comando switch como visto abaixo:
Exemplo 5
//enum simulado
const OPCOES = Object.freeze({
OPCAO1: 1,
OPCAO2: 2,
OPCAO2: 3
});
let op = OPCOES.OPCAO3
switch(op){
case OPCOES.OPCAO1 : console.log("opcao1"); break
case OPCOES.OPCAO2 : console.log("opcao2"); break
case OPCOES.OPCAO3 : console.log("opcao3"); break
default: console.log("opcao invalida"); break
}
Saída
opcao3
JS não possui suporte ao uso de intervalo de valores nos cases do comando switch com
o operador (..) fornecido em algumas linguagens.
Para usar intervalo de valores, vamos utilizar o valor booleano true como argumento para
o switch e uma variável que fará parte das expressões de intervalo.
Sintaxe
nome_variavel = valor
switch(true)
{
case <expressao>: /*corpo*/ ; break
}
Exemplo 6
let a = 10
switch(true){
case a >= 9: console.log("muito bom"); break
case a >= 7: console.log("bom"); break
case a >= 5: console.log("regular"); break
case a >= 3: console.log("ruim"); break
case a >= 1: console.log("muito ruim"); break
default: console.log("demitido"); break
}
Saída
muito bom
Um intervalo de valores pode ser definido utilizando uma expressão relacional, utilizando
operadores relacionais e lógicos, como mostrada
nos cases do comando switch no exemplo abaixo:
Exemplo 7
let a = 5
switch(true){
case a > 8: console.log("aprovado"); break
case a > 6 && a <= 8: console.log("recuperação"); break
case a <= 6: console.log("reprovado"); break
}
Saída
reprovado