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

array + for +[] e suas facetas? duvidas?

Bom dia. Ao chegar nessa parte do curso percebi minhas fraquezas, que seriam uma compreensão mais ampla de algumas funções, o que eu fiz foi escrever varias vezes o código tentando melhorar de forma funcional. A primeira versão ficou imensa e muito analógica, pra altera uma coisa tinha que mexe em tudo o que me fez perceber aonde eu poderia melhora. O mais curto que eu consegui fazer foi chamando duas funções separadas 2015 e 2016 No exemplo do exercício ele usou só uma função pra chamar os dois array.

As cores como eram as mesmas pros dois array eu coloquei sem problema foi bem intuitivo usando cores[i] pra ler tudo do array cores.

eu reparei varias coisas mas não enxerguei com clareza. dentro da função desenhaBarra ele não usou i <serie2015 diretamente, ele usou variáveis " somaAltura ou altura" + [i] pra de alguma forma puxar na hora da chamada da função onde só ali ele vai pescar todo o array 2015 e 2016 la ele chamou desenhaBarra "as cordenas X e Y" e so aqui ele puxa os array de forma independente podendo criar vários além de 2015 e 2016

Essa mágica essa junção aonde o array só e lido na hora de imprimir ou chamar não ficou claro, to quase entendendo, quero entende de cabeça, olhar o exemplo do professor da a resposta mas não responde a duvida de como fazer, o que faz esse array funciona lá

aqui segue o código que eu fiz de cabeça testando função por função.

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

<script>

    function desenhaRetangulo(x,y, altura,largura ,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 imprime2015(x,y,texto){
       desenhaTexto(x+10,y-10,texto);

        for (var i =0; i <serie2015.length;  i++){
             desenhaRetangulo(x, y,serie2015[i],60, cores[i])
             y = y +serie2015[i];

        }
    }
    function imprime2016(x,y,texto){
       desenhaTexto(x+10,y-10,texto);

        for (var i =0; i <serie2016.length;  i++){
             desenhaRetangulo(x, y,serie2016[i],60, cores[i])
             y = y +serie2016[i];

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


    imprime2015(50,50,"2015")
    imprime2016(160,50,"2016")

  </script>
4 respostas

Kleber, aqui está praticamente o seu código igual:

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

<script>

    function desenhaRetangulo(x,y, altura,largura ,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 imprimir(x,y,texto, serie){
       desenhaTexto(x+10,y-10,texto);

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

        }
    }

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

    imprimir(50,50,"2015", serie2015)

    imprimir(160,50,"2016", serie2016)


  </script>

Oque mudei foi tirar as duas funções "imprimir2015" e "imprimir2016" para "imprimir", porque elas faziam a mesma coisa, só tinham nomes diferentes. Ai coloquei uma variável a mais no método de imprimir(x, y, texto, SERIE), variável serie, que seria o array das series 2015 e 2016, assim a função usa elas como parâmetro para lenght.

Imagino que no código do professor ter usado o nome 'cores' como variável e 'cores' como parâmetro possa dificultar o entendimento do parâmetro 'serie', que funciona da mesma forma.

Se entendeu o que ocorre com cores[i], imagine que no código do professor a variável cores tivesse outro nome:

var coresLindas = ['blue','green','yellow', 'red'];

e que a function continuasse com o mesmo nome e mesmos parâmetros:

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

Quando você chamasse a function desenhaBarra, ela ficaria assim:

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

O que o código do professor faz com series é a mesma coisa, empurra para dentro do parâmetro 'serie' todo o valor empacotado da variável 'series2015' e depois de desenhados os retângulos de 2015, empurra para dentro de 'serie' todo o valor empacotado da variável 'series2016'.

Caramba minha mente explodiu aqui. (e o parâmetro que usa o SERIE como endereço pra ler dentro do arrey.lenght) pelo posicionamento dele na hora de chamar função e exatamente isso que vcs falaram. Eu testei aqui deu certo. "paramento" safado.. caramba..

No exemplo da aula eu fiquei confuso pq tinha (x,Y+somaAltura) tinha variavel(altura = serie[i]). eu sei que são importantes mas da maneira que eu tinha construido o código no meu entendimento era mais simples, sem esse rodeio todo que me confundiu.. que luz vocês me deram.

obrigado; HYON BOK LUCAS GALVÃO MOTA

obrigado; akashi

solução!

Sim o professor ter usado o mesmo nome pra 2 coisas gera mais confusões do que deveria no entendimento.