int a = 3 ; int b = 7 ; int c ; c = ++a + (--a * b++) ; A execução do código apresentado, escrito em JavaScript, resulta na variável c com o valor
- A)14.
Errada, porque o resultado da expressão não é 14; os efeitos de ++a, --a e b++ alteram os valores antes e depois do uso na conta.
- B)32.
Errada, pois 32 não corresponde à avaliação real da expressão com os incrementos e decrementos aplicados em ordem.
- C)25.
Certa, pois ++a vale 4, --a vale 3 e b++ vale 7, então c = 4 + (3 * 7) = 25.
- D)24.
Errada, porque 24 não resulta da combinação correta dos operadores unários com a multiplicação.
- E)16.
Errada, já que 16 não bate com o efeito de ++a, --a e b++ sobre os valores de a e b.
Gabarito: C
Em expressões com incremento e decremento, o detalhe que salva sua prova é simples: os operadores unários alteram a variável na hora, e o valor usado na conta pode ser o antigo ou o novo, dependendo de ser pré ou pós-incremento. No JavaScript, a avaliação ocorre da esquerda para a direita, então você precisa acompanhar cada efeito colateral com calma, sem deixar a expressão virar um pequeno caos elegante. Aqui, começa com a = 3 e b = 7. Primeiro vem ++a, que incrementa a antes de usar o valor: a passa a 4 e a expressão rende 4. Depois aparece --a, que decrements a antes de usar: a volta para 3 e esse termo vale 3. Em seguida, b++ usa o valor atual de b, que ainda é 7, e só depois b passa a 8. Assim, a conta fica 4 + (3 * 7) = 4 + 21 = 25. Por isso, a variável c recebe 25, que é o gabarito da questão. O ponto central é dominar a diferença entre pré e pós-incremento. Em prova, a banca adora misturar esses operadores para ver se voce controla o valor retornado e a alteração da variável ao mesmo tempo.