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 if
s 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?
É 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:
Se reparar, no ponto 2. ele executa todos os blocos. Daí ser necessário o break, para garantir que apenas executa o pretendido.
Answered by Claudio Lopes on December 24, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP