Pular para o conteúdo principal

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

ProgramaçãoLinguagens de programação
Código
ce173554
Banca
CESPE / CEBRASPE
Órgão
FINEP
Ano
2024
Nível
Superior
Cargo
Analista - Tecnologia da Informação - Software
Imagem associada para resolução da questãoCom base no código precedente, escrito em JavaScript, assinale a opção em que é corretamente indicado o valor da variável listaTarefasPendentes após a execução do código.
  1. AErro de sintaxe
  2. B"1. Fazer compras\n2. Limpar a casa\n"
  3. C["1. Fazer compras", "2. Limpar a casa"]
  4. D"1. Fazer compras, 2. Limpar a casa"
  5. E2
Revelar gabarito e comentário

GabaritoB — "1. Fazer compras\n2. Limpar a casa\n"

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: concatenação de strings e laço for

Gabarito: letra B. O código percorre um array de objetos com for, filtra as tarefas cuja propriedade concluida é false e, para cada uma, concatena a descrição formatada com \n (quebra de linha) na string listaTarefasPendentes. Como há duas tarefas pendentes, o resultado final é a string "1. Fazer compras\n2. Limpar a casa\n" — exatamente o que a alternativa B apresenta.

O cerne da questão está em entender o que o operador += faz com strings em JavaScript. Diferentemente de outras linguagens, o JavaScript não possui um tipo primitivo "char" e trata strings como sequências imutáveis de caracteres. O operador += (atribuição de adição) quando aplicado a strings realiza a concatenação: ele cria uma nova string que é a junção da string original com o valor à direita do operador, e atribui essa nova string à variável. Por exemplo, se let s = "a"; s += "b";, o valor de s passa a ser "ab". Isso é fundamental para resolver a questão, pois a variável listaTarefasPendentes é inicializada como uma string vazia ("") e, a cada iteração do laço que encontra uma tarefa pendente, recebe a concatenação da descrição formatada.

O laço for percorre o array tarefas do índice 0 até tarefas.length - 1. Para cada elemento, a condição if (!tarefa.concluida) verifica se a propriedade concluida é false. Se for, o bloco é executado: incrementa o contador e concatena a string. A formatação usada é contadorTarefasPendentes + ". " + tarefa.descricao + "\n". O \n é um caractere de escape que representa uma quebra de linha (newline). Portanto, a cada tarefa pendente, adiciona-se ao final da string o número sequencial, um ponto, um espaço, a descrição e uma quebra de linha.

Vamos simular a execução com um exemplo concreto. Suponha que o array tarefas seja:

const tarefas = [
  { id: 1, descricao: "Fazer compras", concluida: false },
  { id: 2, descricao: "Estudar", concluida: true },
  { id: 3, descricao: "Limpar a casa", concluida: false }
];
  • Iteração 1 (i=0): tarefas[0].concluida é false → entra no if. contadorTarefasPendentes vira 1. listaTarefasPendentes recebe "" + "1. " + "Fazer compras" + "\n", resultando em "1. Fazer compras\n".

  • Iteração 2 (i=1): tarefas[1].concluida é true → não entra no if. Nada muda.

  • Iteração 3 (i=2): tarefas[2].concluida é false → entra no if. contadorTarefasPendentes vira 2. listaTarefasPendentes recebe "1. Fazer compras\n" + "2. " + "Limpar a casa" + "\n", resultando em "1. Fazer compras\n2. Limpar a casa\n".

Ao final, a variável listaTarefasPendentes contém exatamente a string da alternativa B. A pegadinha clássica desta questão é confundir a concatenação de strings com a criação de um array. Como o código usa += sobre uma string, o resultado é uma única string com quebras de linha, e não um array de strings. A alternativa C apresenta um array, que seria o resultado se o código usasse push() em um array, mas não é o caso. A alternativa D apresenta uma string sem as quebras de linha, apenas com vírgula e espaço, o que não corresponde à formatação com \n. A alternativa E apresenta o número 2, que é o valor do contador, não da string. A alternativa A sugere erro de sintaxe, mas o código é sintaticamente válido.

Guarde a distinção entre string concatenada e array: o operador += em uma string sempre produz uma string; para construir um array, seria necessário usar push() ou outro método de array. É exatamente nessa fronteira que as alternativas se dividem.

  1. 1Inicializa string vazia
  2. 2Percorre array com for
  3. 3Filtra tarefas pendentes
  4. 4Concatena com += e \n
  5. 5Resultado: string única
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Afirma que há erro de sintaxe. O código apresentado é sintaticamente válido em JavaScript: declaração de array de objetos, variáveis com let, laço for, estrutura condicional if e operador de concatenação += são todos elementos corretos da linguagem. Não há nenhum erro de sintaxe que impeça a execução.

Alternativa B — ✅ Correta ⟵ GABARITO

Esta é a resposta correta. A variável listaTarefasPendentes é uma string que acumula, a cada tarefa pendente, a descrição formatada com número sequencial e quebra de linha (\n). Com duas tarefas pendentes, o resultado é "1. Fazer compras\n2. Limpar a casa\n". A presença do \n no final de cada linha é crucial e está corretamente representada nesta alternativa.

Alternativa C — ❌ Incorreta

Apresenta um array de strings ["1. Fazer compras", "2. Limpar a casa"]. Isso seria o resultado se o código utilizasse push() para adicionar elementos a um array, mas o código usa concatenação de strings com +=. Portanto, o tipo do resultado é string, não array. A alternativa confunde o tipo de dado resultante.

Alternativa D — ❌ Incorreta

Apresenta a string "1. Fazer compras, 2. Limpar a casa", sem as quebras de linha (\n). O código adiciona \n após cada descrição, então o resultado correto contém quebras de linha, não vírgula e espaço. A alternativa ignora o caractere de escape \n presente no código.

Alternativa E — ❌ Incorreta

Apresenta o número 2, que corresponde ao valor final da variável contadorTarefasPendentes, não ao valor de listaTarefasPendentes. A questão pergunta especificamente pelo valor da variável listaTarefasPendentes, que é uma string, não um número. A alternativa confunde as duas variáveis do código.

NÃO CAIA NESSA!

A banca explora a confusão entre string concatenada e array. O candidato que vê += e pensa em "adicionar elemento" pode imaginar que o resultado é um array (alternativa C), mas em JavaScript += em uma string realiza concatenação, produzindo uma única string. Além disso, a alternativa E tenta confundir com o valor do contador, que é um número, mas a pergunta é sobre a string. Fique atento ao tipo de dado que cada variável armazena.

PEGA ESSA DICA!

Para questões que envolvem concatenação de strings em laços, simule mentalmente ou no papel cada iteração, anotando o valor acumulado da string. Preste atenção especial ao caractere de escape \n (quebra de linha) e à diferença entre += (concatenação) e push() (adição a array). Se a alternativa apresentar um array, desconfie: verifique se o código usa push() ou concatenação.

Gabarito: letra B

Link permanente: /questoes/ce173554