9
respostas

Onde está definida a variável "serie"?

Quando a variável altura é definida dentro do loop for, ela recebe o parâmetro "serie[i]" porém não encontrei a definição da array "serie".

Alguém poderia me esclarecer? Obrigado!

<canvas width="600" height="400"></canvas>

<script>

    function desenhaRetangulo(x, y, largura, altura, cor) {
        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');

        pincel.fillStyle=cor;
        pincel.fillRect(x,y, largura, altura);
        pincel.strokeStyle='black';
        pincel.strokeRect(x,y, largura, altura);
    }

    function desenhaTexto(x , y, texto) {
        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');

        pincel.font='15px Georgia';
        pincel.fillStyle='black';
        pincel.fillText(texto, x, y);    
    }

    function desenhaBarra(x, y, serie, cores, texto) {

        desenhaTexto(x, y - 10, texto);

        var somaAltura = 0;
        for (var i = 0; i < serie.length; i++) {
            var altura = serie[i];
            desenhaRetangulo(x, y + somaAltura, 50, altura, cores[i]);
            somaAltura = somaAltura + altura;
        }
    }

    var cores = ['blue','green','yellow', 'red'];
    var serie2015 = [50,25,20,5];
    var serie2016 = [65,20,13,2];

    desenhaBarra(50, 50, serie2015, cores, '2015');
    desenhaBarra(150, 50, serie2016, cores, '2016');

</script>
9 respostas

Acredito que a array "serie" seja substituída pelas arrays "serie2015" e "serie2016" quando a função "desenhaBarra" é chamada.

Oi Vitor, é isso mesmo. Você tem os arrays serie2016 e serie2016 fora da função, mas dentro, você "apelida" elas simplesmente de série por que está recebendo as mesmas via parâmetro.

Isso quer dizer que a variável pode ter um nome fora da função diferente de como você a referencia dentro, contando que use parametrização para isso.

A palavra não é realmente substituição, mas serve pra explicar o que está acontecendo sim. Pra ser mais específico, isso é referência. Você referencia os arrays serie2015 e 2016 como simplesmente serie. Pegou a ideia?

Espero ter ajudado! Bons estudos!

Oi Vitor, a variável série está definida como o valor que a var altura recebe. Observe esse trecho:

function desenhaBarra (x, y, serie, cores, texto){

desenhaTexto(x, y - 10, texto);

var alturaTotal = 0;

for (var i = 0; i < serie.length; i++){

var altura = serie[i];

desenhaRetangulo(x, y + alturaTotal, 50, altura, cores[i]);

var alturaTotal = alturaTotal + altura; } }

como var altura = serie[i] ficou estabelecido que o terceiro parâmero da função desenhaBarra (ou seja a variável serie) receberá será um array. Além disso, a função que realmente desenha os retângulos do gráfico é a desenhaRetangulo. Repare que essa última recebe no terceiro parâmetro a variável altura, que terá como retorno a sequencia do array serie ( 50, 25, 20, 5 caso seja 2015 e 65, 20, 13, 2 se for 2016).

Mais detalhadamente imaginemos que no lugar variável serie tenhamos a incógnita z. Dessa forma teremos: function desenhaBarra (x, y, z, cores, texto) // for (var i = 0; i < z.length; i++)//var altura = z[i]//var serie2015 = [50, 25, 20, 5];//desenhaBarra (50, 50, serie2015, cores, '2015'); Como serie2015, está identificada no terceiro parametro da função desenhaBarra, o programa intenderá que serie2015 = z. Portanto, na primeira leitura, o programa identificará que altura é igual a z[0], ou seja o primeira termo do array z = serie2015[0]=50.

Espero que tenha intendido.

Oi Victor eu poderia chamar o parâmetro por qualquer nome mas é interessante que eu ponha nomes que condizem com a informação que está sendo passada por parâmetro:

var vitorDaAlura = [65,20,13,2];

desenhaBarra(50, 50, vitorDaAlura, cores, '2015');

function desenhaBarra(x(Aqui vai o 50), y(Aqui tmb vai o 50), serie(Aqui vai o vitorDaAlura que é um array), cores(Aqui o array de cores), texto(Aqui vai entrar o 2015) {

Espero ter ajudado.Bons estudos

Vitor, tudo bem? Dá um retorno aqui pra gente por favor?

Oi Wanderson acho que pelo tempo podemos encerrar essa questão ? Tô precisando desses 1000 pontos :)

Opa Maison, o ideal é que o Vitor retorne. Não temos certeza de que ele resolveu o problema ou não. Vamos esperar mais?

Ok Então! Vamos aguardar, pelo que vi no perfil dele, ele concluiu um curso em 2018 então vamos esperar o feedback mesmo.

Oi Vitor, caso persista alguma dúvida a respeito desse exercício pode perguntar aqui mesmo ou se você não tiver mais nenhuma dúvida a respeito você pode marcar uma resposta como solução, finalizando assim esse tópico.Espero ter ajudado. Bons estudos.