image

Bootcamps ilimitados + curso de inglês para sempre

80
%OFF
LUCIO PATROCINIO
LUCIO PATROCINIO15/07/2025 10:55
Compartilhe
Randstad - Análise de DadosRecomendados para vocêRandstad - Análise de Dados

Erro comum que ocorre na condicional SWITCH do JavaScript

  • #JavaScript

Descrição do Problema

Trabalho com linguagens de programação há quase 20 anos e pude ver diversos erros de codificação que ocorrem com frequência em cada uma delas. No caso do JavaScript, comecei o estudo há muito pouco tempo e pude verificar que muitas falhas ocorrem exatamente devido a sua característica de tipagem dinâmica. As mesmas características de flexibilidade que a linguagem oferece e que são consideradas uma vantagem, muitas vezes provocam erros que são difíceis de serem identificados.

Neste artigo pretendo apresentar um erro que ocorreu durante a utilização de CONDICIONAIS em JavaScript. O erro que vou mostrar e que motivou este artigo, ocorreu durante uma aula na própria DIO. Como não aconteceu com o professor da disciplina, ele provavelmente não identificou como erro naquele momento, mas eu havia feito o teste com valores diferentes nas variáveis e por isso meu código apresentou uma solução bem estranha. Consultando a IA Gemini do Google, consegui entender onde havia errado e pude efetuar a correção, conforme relato abaixo.

O código abaixo trata-se da utilização do Condicional SWITCH - CASE para avaliar se uma nota final de um aluno está em uma das seguintes condições:

  • abaixo de 5: deve apresentar a mensagem "Abaixo da média".
  • entre 5 e 7: deve apresentar a mensagem "Na média".
  • acima ou igual a 7: deve apresentar a mensagem "Acima da média".

O código-exemplo que inicialmente fiz apresentava a seguinte estrutura:

const nota = 2; 
console.log("Análise da nota ", nota); 
switch(nota){ 
case (nota < 5): 
  console.log("Abaixo da média!"); 
  break; 
case (nota < 7): 
  console.log('Na média!'); 
  break; 
default: 
  console.log("Acima da média!"); 
}

Quando era executado, a resposta era sempre "Acima da média!", mesmo com valores de nota muito inferiores a 5.

----------------------------------------------------------------------------------------------------

Diagnóstico do Problema

Consultando o Gemini, entendi o seguinte:

  • O valor entre parênteses do SWITCH (no caso o valor da variável "nota") é sempre comparado com o resultado da expressão a frente do CASE (no caso, expressões booleanas tais como "nota < 5").
  • Se pegarmos o primeiro CASE, "nota < 5" será igual a TRUE, porém a comparação que o SWITCH faz é entre o valor de NOTA (no caso 2) com o valor de "(nota <5)", que é TRUE.
  • Assim, a primeira comparação realizada é "5 == (nota <5)" ou "5 == TRUE"?
  • Obviamente, essa comparação irá ser igual a FALSE, e portanto, o SWITCH não entra no primeiro CASE.
  • O mesmo vai ocorrer com os demais CASES, sobrando apenas a cláusula do DEFAULT (por falta) para ser executada.
  • Por isso, qualquer que fosse o valor da nota, sempre iria resultar na apresentação da cláusula DEFAULT.

-----------------------------------------------------------------------------------------------------------------------------------------------------------

Como Resolver o Erro?

Uma solução simples sugerida pela IA do Gemini foi colocar como argumento do SWITCH um simples TRUE, pois desta forma, este valor booleano seria comparado com o resultado das expressões booleanas que se encontram nos CASES. O código então ficaria assim:

const nota = 2; 
console.log("Análise da nota ", nota); 
switch(true){ 
case (nota < 5): 
  console.log("Abaixo da média!"); 
  break; 
case (nota < 7): 
  console.log('Na média!'); 
  break; 
default: 
  console.log("Acima da média!"); 
}

O resultado é que, a execução do código só vai entrar na condição case que seja "verdadeira", ou seja, que assume o valor 'true'.

-------------------------------------------------------------------------------------------------------------------------------------------------------------

Conclusão

Com essa alteração básica, o código passou a funcionar corretamente e a dar as mensagens esperadas para cada valor de nota apresentado. Mas fica, a observação de que o motivo da falha foi o meu entendimento equivocado sobre como o SWITCH deveria funcionar. Esse tipo de problema não é específico de JavaScript. O uso de SWITCH ocorre em diversas linguagens de programação, e portanto, a questão importante é a necessidade de regularmente revisar e consolidar o entendimento dos fundamentos de linguagens de programação. A falta de uma base bem consolidada geralmente é a responsável por esse tipo de erro.

Compartilhe
Recomendados para você
Savegnago - Lógica de Programação
GFT Start #6 - Lógica de Programação
Potência Tech iFood - Desenvolvimento de Jogos
Comentários (1)
Fernando Araujo
Fernando Araujo - 15/07/2025 15:02

Acredito que o erro se deve por considerar que os valores a serem comparados nos cases podem ser condicionais (lógicos), mas eu acho que o comando switch (ou semelhante) em todas as linguagens de programação consideram que o valor dos cases deve ser uma constante (inteiro, string, caractere, etc.).

Para este exemplo, acredito que se a nota fosse um inteiro, o código deveria ficar assim:

const nota = 3; 
console.log("Análise da nota ", nota); 
switch(nota){ 
case 0: case 1: case 2: case 3: case 4: case 5: 
  console.log("Abaixo da média!"); 
  break; 
case 6: 
  console.log('Na média!'); 
  break; 
default: 
  console.log("Acima da média!"); 
}

Mas se ele fosse um valor real, não seria melhor usar um if-else do que um switch, assim:

const nota = 2; 
console.log("Análise da nota ", nota); 
if(nota < 5) {
  console.log("Abaixo da média!"); 
  }
else if (nota == 6) {
  console.log('Na média!'); 
  }
else console.log("Acima da média!"); 

Por fim, acho que o próprio enunciado do problema tem um erro lógico. Por exemplo, para notas inteiras:

  • abaixo de 5: deve apresentar a mensagem "Abaixo da média". --> [Notas 0, 1, 2, 3 e 4]
  • entre 5 e 7: deve apresentar a mensagem "Na média". --> [Notas 5, 6, e 7]
  • acima ou igual a 7: deve apresentar a mensagem "Acima da média". --> [Notas 7, 8, 9, e 10]

Ou seja, a condição "notas entre 5 e 7" inclui o 7, não? E a condição seguinte, "acima ou igual a 7", também!

Ela deveria ser:

  • abaixo de 5: deve apresentar a mensagem "Abaixo da média". --> [Notas 0, 1, 2, 3 e 4]
  • entre 5 e 7, sem incluir o 7: deve apresentar a mensagem "Na média". --> [Notas 5, e 6]
  • acima ou igual a 7: deve apresentar a mensagem "Acima da média". --> [Notas 7, 8, 9, e 10]

Para valores reais da nota, as mesmas condições acima poderiam ser usadas e todos os valores entre as notas limites fariam parte de cada um dos 3 intervalos.

Recomendados para vocêRandstad - Análise de Dados