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
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
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.