7
respostas

Usando uma function para o cálculo

Tentei criar um código onde eu usava uma function para fazer o cálculo de gerações. Usei o "mostra" dentro da function, e depois das functions eu fiz o escopo principal. Porém, ele imprime o número antes do "mostra" do escopo principal, e quando é para imprimir ele dá "undefined". O código:

<meta charset="UTF-8">
<script>

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

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

    function calculaGeracoes(ano){
        var numeroDeGeracoes=Math.round((ano-1500)/28);
        mostra(numeroDeGeracoes);
    }

var ano=2017;
mostra("O número de gerações que se passaram desde 1500 é: " + calculaGeracoes(ano));
</script>

O que estou fazendo de errado?

7 respostas

Beatriz,

Coloquei em forma de comentários o que 'corrigi'.

<meta charset="UTF-8">
<script>

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

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

    function calculaGeracoes(ano){
        return numeroDeGeracoes=Math.round((ano-1500)/28); // atribuiu o resultado do cálculo a var (?) em vez que pedir retorno
        //mostra(numeroDeGeracoes); // chamou o mostra já dentro da pp função - Por isso o 18 está sendo mostrado

    }

var ano=2017;

mostra("O número de gerações que se passaram desde 1500 é: " + calculaGeracoes(ano));
</script>

Oi Maria tudo bem?

O seu erro é não ter solicitado que a função calculaGeracoes não retornou nenhum valor. O correto seria:

<meta charset="UTF-8">
<script>

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

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

    function calculaGeracoes(ano){
        var numeroDeGeracoes=Math.round((ano-1500)/28);
        return numeroDeGeracoes
    }

var ano = 2017;
mostra("O número de gerações que se passaram desde 1500 é: " + calculaGeracoes(ano));
</script>

Boa Lucas!

Entendi o seu código! Mas o programa não executa primeiro o escopo principal e depois, quando chamadas, as funções? Eu chamo a function calculaGeracoes só no meio do "mostra" do escopo principal, não entendi porque o 18 é impresso antes. Não era para nessa situação o mostra da calculaGeracoes "atuar como" um return?

Boa noite Maria,

Quando você termina a função com o mostra(numeroDeGeracoes), você somente esta pedindo para a função demonstrar qual o valor e não retornar o que a função deve exibir, ou seja, utilizando o mostra, ele apresenta durante o escopo, não depois. Já quando é utilizado o return, a função entende que aquele valor foi salvo e que deve aparecer somente quando for solicitada, como no caso do "mostra("O número de gerações que se passaram desde 1500 é: " + calculaGeracoes(ano));"

Qualquer duvida estou a disposição!

Desculpem, pelo visto já ajudaram. Mas como li o título da pergunta e ja resolvi ir fazendo. Vai meu resultado:

<meta charset="UTF-8">
<script>

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

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

    function calculaGeracoes(ano){
        var numeroDeGeracoes=Math.round((ano-1500)/28);
        return numeroDeGeracoes;
    }

var ano = 2017;
mostra("O número de gerações que se passaram desde 1500 é: " + calculaGeracoes(ano));
</script>

Oi Maria, seu código executa assim:

Quando ele está nessa linha:

mostra("O número de gerações que se passaram desde 1500 é: " + calculaGeracoes(ano));

Ele vai para a função calculaGeracoes. executa essalinha:

var numeroDeGeracoes=Math.round((ano-1500)/28);

e Depois essa:

mostra(numeroDeGeracoes);

Chamando a função mostra e passando o resultado do calculo que é 18.Aí ele vai pra função mostra. Executa essa linha:

document.write(frase);

Escreve o 18 na tela.E vai pra função pulalinha(), pula uma linha, aí a função pulalinha acaba, então ela volta pra função mostra que por sua vez também acaba e volta pra função calculageracoes que também acaba sem retornar nenhum valor aí volta pra quem a chamou e imprime:

"O número de gerações que se passaram desde 1500 é: " + undefined;

Como a função calcula gerações não retornou nada ela simplemente delegou para outra função a mostra ele recebe undefined.

Espero ter ajudado e bons estudos.