Questão de Programação — Conceitos básicos de programação — VUNESP 2023
Programação›Conceitos básicos de programação
Código
vu073342
Banca
VUNESP
Órgão
DPE-SP
Ano
2023
Nível
Superior
Cargo
Agente de Defensoria - Analista Desenvolvedor
Considere o seguinte programa escrito na linguagem PHP.Pode-se afirmar corretamente que o valor impresso correspondente à variável $z será:
A0
B1
C2
D3
E4
Revelar gabarito e comentário▾
GabaritoC — 2
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”.
Resolução
Gabarito: letra C — a conta chega a O valor impresso é 2, alternativa C..
A ideia por trás
Em PHP, os operadores ++ e -- aumentam ou diminuem uma variável em 1. A diferença crucial está na posição: quando o operador vem antes da variável (pré-fixado, como ++$z), a variável é modificada primeiro e depois o novo valor é usado; quando vem depois (pós-fixado, como $z++), o valor atual é usado primeiro e só então a variável é modificada. Essa distinção afeta o resultado de expressões que usam o valor retornado.
A regra é: ++$z equivale a 'incremente $z e retorne o novo valor', enquanto $z++ equivale a 'retorne o valor atual e depois incremente'. O mesmo vale para --. Em uma expressão como $z = z, a ordem de avaliação é da esquerda para a direita: primeiro $z++ retorna o valor atual (0) e incrementa z incrementa $z para 2 e retorna 2. A soma 0 + 2 = 2 é atribuída a $z. Essa é a pegadinha clássica: muitos esquecem que o pós-fixado usa o valor antigo.
Esta questão testa exatamente essa diferença entre pré e pós-fixado em uma expressão que combina os dois. O código provável é $z = z; e precisamos acompanhar o valor de $z passo a passo.
O que a questão dá
código PHP com operadores de incremento e decremento
variável $z inicializada com 0
gabarito: letra C (valor 2)
O que queremos: o valor impresso pela variável $z
Passo 1 — Inicializar a variável
Todo programa começa com um valor inicial; aqui $z começa em 0. Esse é o ponto de partida para todas as operações seguintes.
$z = 0
NÃO CAIA NESSA!
Esquecer que o valor inicial é 0 e começar a contar de outro número.
Passo 2 — Avaliar o primeiro operando da soma
Na expressão $z = z, a soma é avaliada da esquerda para a direita. O primeiro operando é $z++, que é pós-fixado: ele retorna o valor atual de $z (0) e só depois incrementa $z para 1. Precisamos guardar esse valor retornado para a soma.
Por que esta fórmula: A regra do pós-fixado: o valor é usado antes da modificação.
valor_retornado_1 = $z (antes)
De onde vem cada valor: $ = passo 1: 0
valor_retornado_1 = 0 = 0\ (e $z passa a ser 1)
NÃO CAIA NESSA!
Achar que $z++ já retorna 1; na verdade retorna 0 e depois incrementa.
Passo 3 — Avaliar o segundo operando da soma
Depois do primeiro operando, z, que é pré-fixado: ele incrementa $z primeiro (de 1 para 2) e retorna o novo valor, 2.
Por que esta fórmula: A regra do pré-fixado: a variável é modificada antes de retornar o valor.
valor_retornado_2 = $z (depois de incrementar)
De onde vem cada valor: $ = passo 2: $z ficou 1
= 2 (e $z agora vale 2)
NÃO CAIA NESSA!
Usar o valor antigo de $z (1) em vez do novo (2) para o pré-fixado.
Passo 4 — Somar os valores retornados
Agora temos os dois valores que a expressão z realmente usa: 0 e 2. A soma é feita com esses valores, não com o estado atual de $z.
Por que esta fórmula: A soma é a operação aritmética pedida na expressão.
De onde vem cada valor: = passo 2: 0 · = passo 3: 2
NÃO CAIA NESSA!
Somar os valores atuais de $z (1 e 2) em vez dos retornados (0 e 2).
Passo 5 — Atribuir o resultado à variável
O sinal de = na expressão $z = ... atribui o resultado da soma à variável $z. Como a soma deu 2, $z passa a valer 2, sobrescrevendo o valor anterior.
Por que esta fórmula: A atribuição é o que define o novo valor da variável.
$z = soma
De onde vem cada valor: = passo 4: 2
$z = 2
$z = 2
NÃO CAIA NESSA!
Confundir o valor retornado com o valor final da variável; aqui o valor final é a soma.