7
respostas

5. Funções e os cidadãos de primeira classe VIDEO3

Nesse codigo a funçao "InprimeNome" é passada com o parametro "pacienteTr" que é uma variavel que nao existe,mas porque o nome dessa variavel("pacienteTr") tem que ser o mesmo nome da variavel que esta dentro da funçao inprime nome,é uma maneira de burlar o javascript?

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

percorreArray(trsPacientes,inprimeNome);

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

    var pacienteAtual = {"nome":tdNome.textContent,
                         "peso":tdPeso.textContent,
                         "altura":tdAltura.textContent,
                         "pegaImc":function(){
                         if(this.altura != 0){
                         var imc = this.peso / (this.altura * this.altura);
                         return imc;
                         console.log(imc);
                         }else{
                         console.log("altura tem que ser maio que zero");
                         }
                         }};
    console.log(pacienteAtual.nome);

}

esse é o codigo que contem a funçao percorre array

function percorreArray(trsPacientes,comportamento){

    for(i = 0;i <= trsPacientes.length-1; i++){

        var pacienteTrAtual = trsPacientes[i];
        comportamento(pacienteTrAtual);


    }
}
7 respostas

Eu me perguntei o mesmo quando vi o vídeo, mas achei que no meio de tantas idas e vindas nas explicações tinham dado um nó na cabeça. Vou acompanhar o tópico.

Olás. Tudo bom José e William?

O pacienteTr é um parâmetro da função. Nos cursos de lógico de programação tem duas aulas, uma do Maurício e outro do Flávio, onde eles explicam o que é uma parâmetro de uma função. Vou deixar o link dos dois vídeos abaixo:

Explicação do Flávio: https://cursos.alura.com.br/course/logica-programacao-javascript-html/section/4/task/3

Explicação do Maurício: https://cursos.alura.com.br/course/praticando-logica-de-programacao/section/2/task/0

Se sobrar qualquer dúvida é só falar :-)

Olá Marcos!! Tdo ok! A duvida nao é sobre o que é um parametro, a duvida é a seguinte; todo parametro existe e tem um valor,mas nesse caso ele so existe dentro da propria função que ele esta sendo atribuído.

Olá, Pedro.

Quando você executa a função percorreArray, isso acontece nessa linha:

percorreArray(trsPacientes, inprimeNome);

Você passa para a função percorreArray um array de pacientes que é a váriavel trsPaciente e a função inprimeNome. Nesse momento a função imprimeNome não é executada, para uma função ser executada em JavaScript é necessário adicionar o abre e fecha parênteses no final da função, por exemplo: imprimeNome("Marco Bruno").

Quando executamos a percorreArray, o array que passamos é a variável trsPaciente, que tem o mesmo nome dentro da função percorreArray, porque definimos assim no parâmetro da função:

function percorreArray(trsPaciente, comportamento) {
    //código
}

Nós passamos como segundo parâmetro da função percorreArray é a função imprimeNome (isso aconteceu quando executamos a percorreArray), mas dentro da função percorreArray nós chamamos de comportamento, pois esse é o nome do segundo parâmetro da percorreArray.

O for que está dentro da percorreArray pega cada posição do array trsPaciente e guarda dentro da variável pacienteTrAtual, na linha seguinte, é executado o parâmetro comportamento que está guardando a função imprimeNome, na execução do comportamento podemos ver que é passado como parâmetro a nova variável pacienteTrAtual:

comportamento(pacienteTrAtual)

Lembre-se que comportamento está guardando a função imprimeNome.

Pedro, escrevi essa explicação com muito carinho. Se ficar qualquer dúvida é só falar. :-)

Obrigado Marco pela assistencia!! mas continuo na duvida.

A minha duvida é o parametro "pacienteTr", se eu troco o nome da erro. Exemplo: quando eu passo inprimeNome como parametro, eu estou passando uma funçao que tbm contem um parametro :("pacienteTr"); mas esse parametro nao existe e so vai existir quando a funçao for chamada dentro de percorre array, recebendo como parametro pacienteTrAtual,sendo assim eu poderia mudar o nome dele antes,por exemplo para pacienteTTR ,mas seu eu mudo o nome do parametro pacienteTr quando eu estou passando a funçao iprimeNome como parametro para PercorreArray ,da erro, se ele ainda nao existe ,nao contem valor, pq da erro?por isso que achei que era uma forma de burlar o javascript ,já que a funçao inprimeNome recebe o parametro pacienteTr. Agradeço novamente Marco ,valeu!!

Eu entendi o que aconteceu. O parâmetro apenas aponta o que será utilizado na função para indicar o processamento, e nesse caso, o parâmetro "pacienteTr" provém do conteúdo da função, no caso:

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

percorreArray(trsPacientes, function(pacienteTr){

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

    var pacienteAtual = { 
        nome : tdNome.textContent, 
        peso : tdPeso.textContent, 
        altura : tdAltura.textContent,
        pegaImc: function() {

            if(this.altura != 0){
                var imc = this.peso / (this.altura * this.altura);
                return imc;
            } else{

                console("Não posso dividir por zero!");
            }
        }
    };    

    console.log(pacienteAtual.nome); 
});

Ele só existe dentro da função para orientar como processar os dados, e por isso é chamado de "parâmetro". Não é uma variável consistentemente dizendo, mas sim um orientador no processamento dos dados, do que fica onde. Na função acima, que printa no console os nomes, se vc alterar o primeiro "pacienteTr", terá que alterar todos dentro da função, pois é a partir dali que o processamento tem por orientação o que manipular. É como se vc dissesse: Eu quero que qualquer coisa chamada "pacienteTr" nessa função possa ser manipulada, e dentro da função explico como se deve fazer. O primeiro parâmetro da função "percorreArray" é dado pelo vetor de trs, mas o segundo disponibiliza a informação.

function percorreArray(trsPacientes, comportamento) {

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

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

Eu entendi William,mas obrigado por tentar ajudar compartilhando o que vc entendeu!! vlw brother!