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

Como acontece o incremento?

Olá, pessoal!

Nesse caso não entendi como o incremento acontece da forma correta. Acompanhem o meu raciocínio:

var raio = 19;
    var pulsa = 0;

    function atualizaTela() {
        limpaTela();

        if (raio > 30) {
            pulsa = -1;
        }else if(raio < 20) {
            pulsa = 1;
        }

        raio+=pulsa;
        desenhaCirculo(300,200,raio,"red");
    }

Ao ser chamada pela primeira vez a função entra com os seguintes valores:

raio = 19

pulsa = 0

Logo, atendem a condição do ELSE IF, pois o raio é menor do que 20. Até aí ok. Quando ele sai da condição e é incrementado, o raio já não é menor do que 20 e também não é maior do que 30. Como ele continua sendo incrementado?

4 respostas

Olá Khayan, o raio continua sendo incrementado pois o seu incremento não depende do if e else, já que ele está fora desse bloco de código.

Seguindo o exemplo que você fez, após a primeira execução da função, raio e pulsa terão os seguintes valores:

  • raio = 20
  • pulsa = 1

Em seguida, há as condições do ife else, onde ocorrerá as verificações:

if (raio > 30) {
    pulsa = -1;
} else if (raio < 20) {
    pulsa = 1;
}

Como raio não é maior que 30, nem menor que 20, nada acontecerá com pulsa, mas as linhas seguintes do código ainda serão executadas, entre elas, a linha do incremento:

raio += pulsa;

Então raio passará a valer 21, e assim por diante.

solução!

Olá Khayan, acho que entendi sua dúvida, a variável pulsa foi declarada fora da função atualizaTela então ela mantem seu valor, na segunda chamada da função raio é igual a 20 e pulsa é igual a 1, apesar de não entrar no if e else a linha

raio+=pulsa;

vai continuar incrementado o raio

veja, se fica mais claro:

//Antes de chamar a função atualizaTela:

pulsa=0

raio = 19

//após primeira chamada da função atualizaTela:

pulsa=1 //entrou nesse if(raio < 20)

raio = 20

//após 2 chamada da função atualizaTela:

pulsa=1 //não entra no if nem no else, mas continua com o valor pulsa = 1 da primera chamada

raio = 21

//após 3 chamada da função atualizaTela:

pulsa=1 //a mesma coisa não entra no if nem no else, mas continua com o valor pulsa = 1 da primera chamada

raio = 22

. . .

e assim vai até: pulsa =1 raio = 31

e na próxima chamada:

pulsa = -1 //entrou nesse if (raio > 30)

raio = 30 //raio começa a diminuir até 19 novamente

coloca um console.log dentro da função atualizaTela assim:

    function atualizaTela() {
    console.log(pulsa);
    console.raio(raio);

        limpaTela();

        if (raio > 30) {
            pulsa = -1;
        }else if(raio < 20) {
            pulsa = 1;
        }

        raio+=pulsa;
        desenhaCirculo(300,200,raio,"red");
    }

e aumenta o tempo da chamada para um segundo assim:

setInterval(atualizaTela, 1000);

e acompanhe o valor das variáveis pelo console que você vai entender melhor

Abraços, Leandro

Muito obrigado, Rômulo e Leandro! Perfeito!

De nada, Khayan! Como a sua dúvida foi solucionada, eu vou fechar este tópico, tudo bem?

Para qualquer outra dúvida, não hesite em recorrer ao nosso fórum! Bons estudos pra você!