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

ajuda

Galera, preciso de uma força!

Quando escrevo o meu código assim ele roda perfeitamente:

var mostra = false;
    function mostraBandeira(){
        if(mostra == false){
            desenhaBandeiraBrasil();
            mostra = true;
        }else if(mostra){
            desenhaBandeiraAlemanha();
            mostra = false;
        }
    }

    setInterval(mostraBandeira, 3000);

Porém, se eu estruturo ele dessa forma abaixo, só aparece a bandeira da alemanha.

var mostra = false;
    function mostraBandeira(){
        if(mostra == false){
            desenhaBandeiraBrasil();
            mostra = true;
        }
        if(mostra){
            desenhaBandeiraAlemanha();
            mostra = false;
        }
    }

    setInterval(mostraBandeira, 3000);

Eu não consigo entender o motivo de não funcionar da segunda forma, pois a variável está sendo alterada na mesma e toda vez que a função fosse chamada ela deveria executar um dos 'IFs'. Podem me explicar o que se passa?

2 respostas
solução!

Oi Ley, o que está acontecendo é o seguinte, no código abaixo:

if(mostra == false){
    desenhaBandeiraBrasil();
    mostra = true;
}else if(mostra){
    desenhaBandeiraAlemanha();
    mostra = false;
}

na execução o programa verifica (if) se a variável mostra é falsa, se a condição foi satisfeira, ou seja mostra for false, vai desenhar a bandeira do Brasil e atribuir true para mostra, caso contrario, ou seja, caso a variável mostra for true, o que será desenhado vai ser a bandeira da Alemanha e colocar o mostra para false. E isso faz com que o programa execute corretamente.

Quando você faz essa alteração que falou:

if(mostra == false){
    desenhaBandeiraBrasil();
    mostra = true;
}
if(mostra){
    desenhaBandeiraAlemanha();
    mostra = false;
}

O que acontece é que o fluxo fica assim:

Verifica se mostra é falso, se não for falso, ou seja, verdadeiro, ele vai para o if abaixo, desenha a bandeira da Alemanha e coloca o mostra para false.

Mas o problema vem agora, quando o mostra for falso, caso o mostra tenha o false como valor, vai desenhar a bandeira do brasil e colocar o mostra para true. Ao terminar esse if, ele vai para o debaixo, que verifica se o mostra é verdadeiro, como no if anterior vc atribuiu true para ele, a condição será satisfeita e a bandeira da alemanhã será desenhada.

Isso acontece pois o primeiro código você tem duas condições: se mostra for false então faça isso, caso contrario faça aquilo. Já no seguinte você só tem o seguinte fluxo: se mostra for false faça isso. Se o mostra true faça aquilo. A palavra chave ficou para o caso contrario.

Espero que eu tenha te ajudado... caso tenha alguma dúvida, manda mais mensagem

ahm.. entendi. Obrigado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software