image

Bootcamps ilimitados + curso de inglés para sempre

80
%OFF
LUCIO PATROCINIO
LUCIO PATROCINIO15/07/2025 10:55
Compartir
Randstad - Análise de DadosRecomendado para tiRandstad - 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.

Compartir
Recomendado para ti
Savegnago - Lógica de Programação
GFT Start #6 - Lógica de Programação
Potência Tech iFood - Desenvolvimento de Jogos
Comentarios (2)
DIO Community
DIO Community - 16/07/2025 13:18

Lucio, a forma como você abordou o erro no uso do switch em JavaScript foi excelente! A explicação foi clara e forneceu uma ótima visão sobre um erro comum que pode ser difícil de identificar, especialmente para quem está começando a programar. O conceito de comparar expressões booleanas com valores diretamente no case realmente gera confusão, e sua análise foi precisa ao destacar esse comportamento.

A sugestão de usar switch(true) para resolver o problema foi uma solução prática e direta, que pode ser muito útil, especialmente em casos como o que você descreveu, onde você precisa de uma comparação com múltiplas condições. Esse tipo de ajuste simples pode salvar bastante tempo de debugging!

Além disso, seu ponto sobre a importância de revisar os fundamentos das linguagens de programação é fundamental. Muitas vezes, ao aprender novas tecnologias ou conceitos, esquecemos de revisar como as estruturas básicas funcionam, o que pode levar a falhas simples, mas difíceis de identificar.

Você já pensou em aplicar esse tipo de raciocínio em outros casos, talvez com outras estruturas de controle ou em projetos mais complexos?

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.

Recomendado para tiRandstad - Análise de Dados