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

Aula 9 - Manipulando Array

function sorteiaNumeros(quantidade){

        var segredos = [];

        var numero = 1;

        while (numero <= quantidade){


            segredos.push(sorteia());
            numero++
        }

            return segredos;

    }
    var segredos = sorteiaNumeros(3);

Dúvida: O Flávio disse que: " A variável segredos do código ( var segredos = sorteiaNumeros(3);); está RECEBENDO o valor RETURN segredos (return segredos;)". Partindo desse raciocínio; eu não entendi porque tivemos que usar o return segredos; - sendo que ele está dentro de uma função e a (var segredos) que está fora da indentação recebe o sorteiaNumero(3); ...que para mim, está parecendo ser a mesma coisa. E , também, quando o Flávio refere-se ao - return segredos; - qual deles o return devolve? -> var segredos = [];? ; -> segredos.push(sorteia());??? . Sinceramente, minha mente fez uma salada mista ( desculpa rsss)! Flávio, poderia me ajudar a encontrar o raciocínio correto ?? Grato!!

6 respostas

São duas variáveis diferentes, com o mesmo nome, e que pertencem a escopos diferentes.

O ideal é que tivessem nomes diferentes para evitar confusão.

A variável "segredos" de dentro da função, é visível apenas dentro da função e só existe enquanto a função executa.

A variável "segredos" de fora da função existe no módulo principal e armazena o "retorno" da função.

Obrigado Gabriel! Entendi o que disse mas mesmo assim continuo confuso:

"A variável "segredos" de fora da função existe no módulo principal e armazena o "retorno" da função."

Pois bem, se a variável fora da função armazena o retorno dá função; por que a variável segredos recebe a função sorteia números(3). -> (var segredos = sorteiaNumeros(3);) .

Para mim é como se houvesse uma duplicidade: se variável segredos já sofreu o retorno dá função, podíamos apenas colocar vários segredos, ao invés de, var segredos = sorteiaNumeros(3);

Tentando entender ainda.

Trocando o nome da variável fica melhor?

// Neste ponto a função é declarada apenas
// Este código só será acionado no futuro
function sorteiaNumeros(quantidade){
        var segredos = [];
        var numero = 1;
        while (numero <= quantidade){
            segredos.push(sorteia());
            numero++
        }
            return segredos;
    }


// Neste ponto a função é "invocada" e o resultado da função é guardado dentro da variável "numeros"
// Somente agora a função é chamada para dar uma resposta.
var numeros = sorteiaNumeros(3);

E ai beleza?

Quando você cria uma variável dentro de uma função, ela fica restrita a esta função, sendo uma variável local. Imagine que quando cria a função, você cria uma área de ação, um escopo e tudo que esta ali dentro se restringe ali. Quando você usa o return, você esta tirando algo desta área e retornando a quem pediu.

No seu código, você criou uma função que não esta sendo executada até você chamar ela. Na ultima linha, quando você coloca o nome dela, você chama ela, você executa ela e ai todo o código acontece. Como você disse na função que existe uma saída, um retorno, este retorno é mandado de volta à quem chamou.

Se você olhar, a var segredos da ultima linha é um código novo que quer receber o que acontece na função de sortear números. Por acaso existe uma variável lá que tem o mesmo nome, mas que não tem relação direta com a que está chamando.

Deu para entender?

function sorteiaNumeros(quantidade){

        var segredos = [];

        var numero = 1;

        while (numero <= quantidade){


            segredos.push(sorteia());
            numero++
        }

            return segredos;

    }
    var segredos = sorteiaNumeros(3);

Primeiramente, obrigado pela ajuda! Vamos ver se eu entendi:

a ( var segredos = []; ), está dentro da função ( sorteiaNumeros(quantidade); ) e ela terá um parâmetro que é a quantidade de números que eu quero que seja sorteada aleatóriamente por uma outra função que foi criada, que é a ( sorteia() ), até ai beleza (eu acho!rs). Posteriormente foi criado um while para fazer a contagem das quantidades de números aleatórios que eu quero que seja sorteado ( segredos.push(sorteia() ); Essa função segredos.push(sorteia) vai colocar os números aleatórios dentro de var segredos = [], correto??. Quando eu chamo ( return segredos; ), eu estou chamando tudo que esta dentro de while para (var segredos = []; )?????? . Se for isso, porque tenho que usar return se já temos uma função onde está guardado todo o código.

Por exemplo, no caso da função: function sorteia() { return Math.round(Math.random() * 10) )} , eu entendo que se tenho uma VAR NUMERO = SORTEIA(); ... variável numero receberá tudo que esta dentro do sorteia!...

Eu chego lá!!! rsss....obrigado mais uma vez!!!

solução!

Está quase tudo correto.

O "return segredos" devolve como resposta para quem chamou a função "var segredos = sorteiaNumeros(3);" o resultado do processamento da função (números sorteados).

A função é chamada nesta linha "var segredos=sorteiaNumeros(3). A partir daí o processamento da função é iniciado e o valor é devolvido pelo return.