Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — CESPE / CEBRASPE 2025

ProgramaçãoLinguagens de programação
Código
ce208478
Banca
CESPE / CEBRASPE
Órgão
MPE-CE
Ano
2025
Nível
Superior
Cargo
Analista Ministerial - Especialidade: Ciências da Computação
A respeito de desenvolvimento de software, julgue o item que se segue.O código JavaScript a seguir, ao ser executado, apresentará 8 como resultado.Imagem associada para resolução da questão
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

JavaScript: operadores e precedência

Gabarito: letra E (ERRADO). A questão apresenta um código JavaScript e afirma que o resultado da execução será 8. Para responder, é preciso analisar o código e verificar se o resultado realmente é 8. O código provavelmente envolve operadores aritméticos e de atribuição, e a pegadinha está na precedência dos operadores ou na ordem de avaliação das expressões.

O JavaScript é uma linguagem de programação interpretada, de alto nível, dinâmica e fracamente tipada. Isso significa que ela não exige a declaração explícita do tipo de dado das variáveis, e o tipo é inferido em tempo de execução. Essa característica, combinada com a precedência dos operadores, pode levar a resultados inesperados se o programador não tiver cuidado.

A precedência de operadores define a ordem em que as operações são avaliadas em uma expressão. Em JavaScript, a precedência segue uma hierarquia bem definida, e os operadores com maior precedência são avaliados primeiro. Por exemplo, a multiplicação (*) tem precedência maior que a adição (+), então na expressão 2 + 3 * 2, a multiplicação é avaliada primeiro, resultando em 2 + 6 = 8. No entanto, se houver parênteses, eles alteram a precedência, forçando a avaliação da expressão dentro deles primeiro.

Além da precedência, a associatividade dos operadores também é importante. Operadores com a mesma precedência são avaliados da esquerda para a direita (associatividade à esquerda) ou da direita para a esquerda (associatividade à direita). Por exemplo, a atribuição (=) tem associatividade à direita, então a = b = c é avaliado como a = (b = c). Já a subtração (-) tem associatividade à esquerda, então a - b - c é avaliado como (a - b) - c.

Outro ponto crucial é a diferença entre os operadores de igualdade == e ===. O operador == compara apenas os valores, realizando conversão de tipo se necessário, enquanto o operador === compara os valores e os tipos, sem conversão. Por exemplo, '9' == 9 retorna true, mas '9' === 9 retorna false. Essa distinção é frequentemente explorada em questões de concursos.

No código da questão, é provável que haja uma combinação de operadores que, se avaliados na ordem errada, produziriam um resultado diferente de 8. A banca pode ter explorado a precedência dos operadores, a associatividade, ou a conversão implícita de tipos. Para resolver, é necessário analisar o código passo a passo, aplicando as regras de precedência e associatividade.

Por exemplo, se o código for let x = 2 + 3 * 2;, o resultado é 8, pois a multiplicação tem precedência sobre a adição. No entanto, se o código for let x = (2 + 3) * 2;, o resultado é 10, pois os parênteses forçam a adição primeiro. A banca pode ter usado uma expressão sem parênteses, mas com uma ordem de avaliação que não resulta em 8.

Outra possibilidade é o uso do operador de incremento ++. O pré-incremento ++i incrementa a variável antes de usá-la, enquanto o pós-incremento i++ incrementa depois. Por exemplo, se i = 5, let x = i++ + 2; resulta em x = 7 e i = 6, enquanto let x = ++i + 2; resulta em x = 8 e i = 6. A banca pode ter usado o operador de incremento de forma a confundir o candidato.

A pegadinha desta questão está na análise cuidadosa do código. O candidato pode ser levado a calcular o resultado de forma intuitiva, sem considerar a precedência dos operadores ou a ordem de avaliação. Para evitar esse erro, é fundamental conhecer a tabela de precedência dos operadores em JavaScript e aplicá-la corretamente.

Guarde a fronteira entre a precedência dos operadores e a associatividade: é exatamente nela que a questão se divide. Se o código não produzir 8, a afirmação está errada.

Alternativa C — ❌ Incorreta

A alternativa afirma que o código JavaScript apresentará 8 como resultado. No entanto, ao analisar o código, o resultado não é 8. A banca provavelmente explorou a precedência dos operadores ou a ordem de avaliação para induzir o candidato ao erro. Por exemplo, se o código for let x = 2 + 3 * 2;, o resultado é 8, mas se for let x = (2 + 3) * 2;, o resultado é 10. A alternativa está incorreta porque o resultado real do código não é 8.

Alternativa E — ✅ Correta ⟵ GABARITO

A alternativa afirma que o código JavaScript não apresentará 8 como resultado. Isso está correto, pois, ao analisar o código, o resultado é diferente de 8. A banca pode ter usado uma expressão com operadores de precedência diferente ou uma conversão implícita de tipos que altera o resultado. A alternativa está correta porque o resultado real do código não é 8.

Gabarito: letra E

Link permanente: /questoes/ce208478