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

DÚVIDA NO MODO QUE EU FIZ

Olá pessoa, estava terminando minhas aulas, e veio o seguinte código:

<meta charset="UTF-8">
<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    var contador = 2;
    while(contador <= 100) {
        mostra(contador);
        contador = contador + 2; // incrementa de dois em dois
    }
    mostra("FIM");
</script>

Até ai tudo bem, eu entendi perfeitamente, porém tentei brincar rsrs e mudar apenas uma linha do código deixando ele assim:

<meta charset="UTF-8">
<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    var contador = 2;
    while(contador <= 100) {
        mostra(contador + 2);

    }
    mostra("FIM");
</script>

onde eu alterei o mostra(contador +2);

minha dúvida é a seguinte, pq não funciona? a lógica do

"mostra(contador);

contador = contador + 2;"

não é a mesma de

"mostra(contador + 2);" ????

Desculpe se estiver fazendo uma pergunta simples ou boba ( e acredito que seja e muito), más queria entender o por que do segundo modo estar errado, muito obrigado desde já!

5 respostas

Não é que não funcione, mas com esse código ele vai entrar em loop infinito, pois o while nunca vai retornar false (tipo basicamente você remover o código que finalizaria a repetição). Então pelo fato do script nunca terminar, ele não vai retornar algo pra tela e vai travar o navegador como aconteceu aqui comigo kkkk

A sua função mostra em tese deveria servir apenas para imprimir(mostrar) o valor do contador. No que você retira a linha:

contador = contador + 2; // incrementa de dois em dois

Seu loop deixa de incrementar ele só incrementa a primeira vez e fica rodando e chamando a função infinitamente(loop infinito) com o mesmo valor. Pórem a um jeito de resolver isso basta chamar a função já passando o incremento corretamente dessa forma:

<meta charset="UTF-8">
<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    var contador = 0;
    while(contador < 100) {
        mostra(contador = contador + 2);
        // incrementa de dois em dois
    }
    mostra("FIM");
</script>
solução!

Oi Gustavo! Uma coisa é imprimir contador + 2 e outra é alterar o valor da variável como contador = contador + 2.

Sua alteração apenas imprime o valor de contador + 2. Como ela não modifica incrementando o contador, seu código não funciona como esperado.

Mas a sua tentativa de tentar simplificar o código com certeza é louvável.

O meu fiz assim...

<meta charset="UTF-8">

<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    var contador = 0;

    while(contador <= 100) {
        mostra(contador++);
        contador++;
    }

    mostra("FIM")
</script>

Funcionou! Pelo que percebi, no loop ele chama a função mostra passando o valor do contador e depois que imprime ele incrementa, já na linha abaixo, incrementa de novo!

Isso se chama pós incremento e tem mais relação com recurso de linguagem do que lógica.

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