Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no exercício "Acertando Alvo"

if ((300 - raio < x < 300 + raio)
             && (200 - raio < y < 200 + raio ))  {

            alert("Acertou!");
        }

Olá, boa noite. Fiz dessa forma e em qualquer lugar que clico diz que acertei. Por que isso acontece?

Grato

2 respostas
solução!

Bom dia Gustavo. Desculpa pela demora, espero que esteja tudo bem.

O javaScript não trata as avaliações do tipo (300 - raio < x < 300 + raio) da forma que você está pensando. Vamos lá em etapas ver o que provavelmente está acontecendo:

Digamos que as variáveis são raio = 50 e x = 300. Então a condição é:

(250 < x < 350)

O javaScript faz apenas uma dessas operações por vez e depois compara o resultado dessa operação lógica com a próxima operação, ilustrado da seguinte forma:

( (250 < x) < 350)

Qual o resultado da operação 250 < x? Isso aí, a operação retorna um true. Agora isso seria a segunda etapa:

( true < 350)

E agora? Qual deveria ser a saída disso? O javaScript tenta converter implicitamente esses valores e te jogar um resultado, mas isso pouco nos interessa pois no nosso problema não deveríamos comparar um número (350) com um valor de verdadeiro ou falso (true). Então como devemos fazer ao invés disso?

Não tem como fugir, vamos escrever mais um pouco igual à recomendação dada pelo instrutor. A nossa comparação de x com o raio fica:

(300 - raio < x && x < 300 + raio)

Ou seja, de forma lógica podemos ler a expressão como 300 - raio É MENOR QUE x E x É MENOR QUE 300 + raio

Espero ter respondido sua dúvida, foi uma ótima pergunta. Continue assim e bons estudos!

Entendi perfeitamente, muito obrigado.