14
respostas

Duvida: Funções e os cidadãos de primeira classe (video 3)

Assim como varias pessoas aqui, eu tambem estou com duvida com relacao ao que foi apresentado no terceiro video.

Nao existe um ponto especifico que fiquei com duvida, a minha duvida é no geral mesmo. Parece que o instrutor tenta abordar varias coisas em um unico video. Ja assisti 3 vezes e ate agora nao consegui entender o que está sendo feito.

Alias, nao culpo o instrutor, pois nota-se que ele entende muito bem da linguagem mas acho que a equipe do Alura deveria considerar a possibilidade de refazer ou quebrar essa aula em pequenas partes, iniciando com exemplos simples ate chegar onde o instrutor queria.

Talvez para os mais experientes nao seja tao complicado, mas para pessoas que estao iniciando os estudos no assunto, fica dificil de acompanhar dessa maneira.

14 respostas

Oi Bruno

Obrigado pelo feedback, iremos verificar, sobre a sua dúvida, você consegue dizer o que você não entendeu ou o que você não conseguiu fazer?

abraço

Oi Caio,

Entao, eu entendi que ele tentou mostrar como reutilizar funcoes, porem eu nao compreendi a separacao que ele fez.

Também achei bem embolado quando poderia ser mais simples. Mas o que o Professor tentou passar é apenas separar 3 blocos de código onde cada parte resolve seu lado.

Primeira parte "percorre.js" ele criou uma função de loop do array e só resolve o problema trsPacientes. O trPacientes vem da variável do "imprime-nome.js", por isso ele precisa passar como parâmetro na função percorreArray.

Segunda parte "imprime-nome.js" vai trabalhar todo conteúdo que é mais volátil que vem do DOM (mudanças de html+js).

Terceira parte "calcula-imc.js" faz o que diz o nome. Novamente chamamos a função trsPacientes. Mas repara que tem código duplicado no calcula-imc e poderia ter passado a função evitando mais código.

O que posso dizer no meu humilde entendimento noob, tudo o que se refere a entrada e processamento destes dados foi quebrado em 2 partes, fazendo que seja necessário em todas as funções (que poderia ser feita resumida acredito eu) chamar o trsPacientes que fica na instância de cada arquivo "percorre e imprime" para haver retorno já que as variáveis sitadas estão em outro mundo javascript (imprime-nome).

// por isso precisa ser chamado na ordem estes arquivos

 <script src="percorre.js"></script>                
 <script src="calcula-imc.js"></script>                
<script src="imprime-nome.js"></script> 

//no html

Achei que fosse o único que tive dificuldades... realmente ficou muita informação num único vídeo.

Bruno, eu concordo contigo. Quanto às funções, você quer uma ajuda? Se sim, me procura que eu te explico como funciona cada tipo de função e o que é o escopo da função

Eu pensei que só eu estivesse com dificuldade, estava indo bem, mas parece que foi ensinado muito conteúdo num mesmo vídeo, gostaria de sugerir que fossem quebrados em assuntos, como fez o professor Flávio nas aulas de lógica da programação, ficou bem mais claro. Sou iniciante também por isso a dificuldade.

estou com essa mesma dúvida nessa aula do terceiro vídeo, até então estava tudo tranquilo, nesse vídeo percebi que foram abordadas diversas coisas em um curto tempo, assim causando isso...

Oi Pessoal

Estamos cientes dos pontos que levantaram, por isso nesse momento começamos uma nova versão desse curso de js, em breve ele vai estar no ar, infelizmente não tenho uma data precisa.

Vi que apareceu muitas dúvidas diferentes de pessoas diferentes, para cada um ter um feedback interessante eu peço que cada abra uma nova dúvida sobre o assunto, assim mais pessoas irão ajudar.

abraços

Oi Caio, os feedbacks, pelo que eu pude entender estao todos relacionados com o mesmo video. Infelizmente o assunto nao está muito bem dividido, deixando nós, estudantes bastante sobrecarregados.

Mas fico feliz com a noticia de que um novo curso de JS está sendo formulado. Vou torcer para que o Flavio seja o instrutor.

Abs!

Nossa estou vendo pela quinta vez, e estou no mesmo, muito conteúdo para processar de uma vez, entendi mais ou menos a idéia mas na hora de executar estou me perdendo e volto no vídeo, leio o resumo e fico na mesma.

Que ótima notícia! Tomara que seja o Flavio o instrutor! Ele tem uma didática maravilhosa!

Bruno, ele separou as funções para reutilização de código, para facilitar a modificação, caso aconteça no futuro. O que ele fez? Ele criou um novo arquivo percorre,js

function percorreArray(trsPacientes, comportamento){
    for(var posicaoAtual = 0; posicaoAtual <= trsPacientes.length -1; posicaoAtual++){

        var trAtual = trsPacientes[posicaoAtual];
        comportamento(trAtual);
    }
}

Nessa função que ele fez, ele vai receber o valor do que foi passado por parâmetro no outro arquivo, no imprime-nome.js.

var trsPacientes = document.getElementsByClassName("paciente"); 

percorreArray(trsPacientes, imprimeNome);

function imprimeNome(pacienteTr){
    var tdNome = pacienteTr.getElementsByClassName("info-nome")[0];
    var tdPeso = pacienteTr.getElementsByClassName("info-peso")[0];
    var tdAltura = pacienteTr.getElementsByClassName("info-altura")[0];

    var paciente = {nome: tdNome.textContent, 
                    peso: tdPeso.textContent, 
                    altura: tdAltura.textContent, 
                    pegaImc: function(){
                        if (this.peso != 0) {
                            var imc = this.peso/ (this.altura * this.altura); // 25
                            return imc;
                        } else console.log("Altura = 0")
                    }};
    console.log(paciente.nome);
}

Percebe, que o arquivo function percorreArray do arquivo percorre.js depende que no arquivo imprime-nome.js ele passe por parâmetro o valor dos pacientes.

Quando ele invoca a percorreArray(trsPacientes, imprimeNome) no arquivo imprime-nome.js, ele esta passando o valor dos pacientes, mas a função que ele vai utilizar para fazer a impressão dos nomes.

Voltando ao arquivo percorre.js, repare que foi criado o mesmo for que utilizava nos outros dois arquivos, foi criada uma variável para receber o valor do paciente atual, e depois da variável, existe uma função sendo invocada, essa função é a função que tu passou por paramentro na hora de ela ser invocada.

function percorreArray(trsPacientes, comportamento){
    for(var posicaoAtual = 0; posicaoAtual <= trsPacientes.length -1; posicaoAtual++){

        var trAtual = trsPacientes[posicaoAtual];
        comportamento(trAtual);
    }
}

Depois da sétima vez assistindo o vídeo da aula 3, comecei a entender o código, porém ainda me resta uma dúvida, o parâmetro "comportamento" dentro da função "percorreArray", até então ao meu entender os parâmetros eram utilizados para alimentar a função com determinada informação e nesse caso está fazendo ao contrário, está retornando os valores de "trAtual", ou seja, quer dizer q parâmetros servem tanto para receber determinado tipo de informar, como tbm mandar? E nesse mesmo caso, eu n poderia retornar a informação que queremos da função "percorreArray" com um RETURN??? thx

Esse comportamento serve para você passar a função que ele vai chamar, se perceber, tem o calcula-imc e o cadastro. O comportamento seria a função de cadastrar ou a de calcular-imc. Percebe que ele tem o for, é ele chama várias vezes o comportamento(), sempre passando o valor atual do paciente, e assim ele vai, até chegar ao fim do array de pacientes. Não teria necessidade de fazer um return, pois nenhuma variável vai ser pego o valor, já que todas estão definidas.