Questão de Programação — Linguagens de programação — CESPE / CEBRASPE 2024
Programação›Linguagens de programação
Código
ce173554
Banca
CESPE / CEBRASPE
Órgão
FINEP
Ano
2024
Nível
Superior
Cargo
Analista - Tecnologia da Informação - Software
Com 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.
AErro de sintaxe
B"1. Fazer compras\n2. Limpar a casa\n"
C["1. Fazer compras", "2. Limpar a casa"]
D"1. Fazer compras, 2. Limpar a casa"
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:
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.
1Inicializa string vazia
2Percorre array com for
3Filtra tarefas pendentes
4Concatena com += e \n
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.