TransWikia.com

Qual a lógica por trás do switch case no JavaScript?

Stack Overflow em Português Asked on December 24, 2021

Comecei meus estudos em JavaScript e tive contato com o switch, segue exemplo:

let permissao;
switch (permissao){
    default:
    console.log('sem acesso');
    break;
    
    case 'estagiário':
    console.log('acesso limitado');
    break;

    case 'contratado':
    console.log('acesso pleno');
    break;

    case 'gerente':
    console.log('acesso irrestrito');
    break;
}

Pelo o que eu entendi, o switch funciona como uma cadeia de ifs simplificada. Então, por que é necessário o uso do break?

Penso que se os cases são instruções de execução para uma situação específica, se a situação não cumpre o case, não deveria ser executada, tal como um if. Mas se tiro os breaks, ele roda como se todas as situações fossem verdadeiras, o que não é verdade. Qual a lógica por trás disso?

2 Answers

É uma característica da linguagem cada case poder ter break. É assim que a linguagem foi desenhada. Quando um break for invocado o switch é interrompido.

O case é um label, funciona como um ponteiro para o statement onde vai correr código para o caso específico. EM JavaScript labels não bloqueiam o código, por isso é possível correr código dentro de vários labels até um break os parar.

Tendo dito isso, a ausência de break no switch não é erro de sintaxe mas causa comportamentos indesejáveis. Como está referido na MDN: _"a ausência do break vai fazer o script correr o código de "case" em "case" até encontrar um break ou o switch terminar.

The optional break statement associated with each case label ensures that the program breaks out of switch once the matched statement is executed and continues execution at the statement following switch. If break is omitted, the program continues execution at the next statement in the switch statement.

Mesmo no caso do ultimo case que tecnicamente não precisaria de um break, é preferível ter sempre por consistência e para evitar comportamentos aberrantes difíceis de debugar.

const permissao = 'estagiário';

switch (permissao){
    default:
    console.log('sem acesso');
    break;
    
    case 'estagiário':
    console.log('acesso limitado');
    // break; 

    case 'contratado':
    console.log('acesso pleno');
    // break;

    case 'gerente':
    console.log('acesso irrestrito');
    break;
}

Answered by Sergio on December 24, 2021

É assim que funciona:

  1. A expressão do comutador é avaliada uma vez.
  2. O valor da expressão é comparado com os valores de cada caso.
  3. Se houver uma correspondência, o bloco de código associado será executado.
  4. Se não houver correspondência, o bloco de código default é executado.

Se reparar, no ponto 2. ele executa todos os blocos. Daí ser necessário o break, para garantir que apenas executa o pretendido.

Source:https://www.w3schools.com/js/js_switch.asp

Answered by Claudio Lopes on December 24, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP