Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
13
respostas

Dúvida no Ex. 5 da Aula 5 - Funções e os cidadãos de primeira classe

Galera, estou com a seguinte dúvida. Tenho 3 arquivos:

1º - calcula-imc.js

var trsPacientes = document.getElementsByClassName("paciente"); // Array de trs

percorreArray (pacientes, function(trsPacientes){

    var imc = paciente.pegaImc();

    var tdImc = pacienteTr.getElementsByClassName("info-imc")[0];
    tdImc.textContent = imc;

    console.log(imc);
};

2º - monta-paciente.js

function montaPaciente (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.altura != 0){
                        var imc = this.peso / (this.altura * this.altura);
                        return imc
                        } else {
                            console.log("Nao Posso Dividir por Zero");
                        }
                    }
    }
    return paciente;
}

3º - percorre-arrays.js

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

        var pacienteTr = trsPacientes[posicaoAtual];

        comportamento(pacienteTr);
    };
};

No console aparece a seguinte mensagem de erro para a linha 27 "};" do calcula-imc.js

"Uncaught SyntaxError: missing ) after argument list"

No html estão chamados na seguinte ordem

    <script src="monta-paciente.js"></script>
    <script src="percorre-array.js"></script>
    <script src="calcula-imc.js"></script>
13 respostas

Jarom, Boa Tarde .

no arquivo monta-paciente.js faltou fechar a função };

verifica se esse problema , caso ocorrer outro poste no fórum.

Bom estudo

Celso, não encontrei a parte que tem que fechar a função, poderia copiar e colar a linha aqui, por favor? Obrigado!

Jarom no percorreArray, faltou fechar com ).

Está assim: percorreArray (pacientes, function(trsPacientes){

deve ficar assim: percorreArray (pacientes, function(trsPacientes)){

Jarom ,

falta tambémfechar o parenteses no percorre array como o hugo falou , um parentes no calcula-imc.js .

ja no arquivo monta-paciente , no ultima chave onde fecha a função está faltando um ;

tem que ser assim :

function montaPaciente (pacienteTr){

        // conteúdo da classe 

     }
    return paciente;
};

Espero ter ajudado

Galera, infelizmente não consegui, vou reenviar o conteúdo com as alterações e os novos erros que estão aparecendo.

1º - calcula-imc.js

var trsPacientes = document.getElementsByClassName("paciente"); // Array de trs

percorreArray (pacientes, function(trsPacientes)){

    var imc = paciente.pegaImc();

    var tdImc = pacienteTr.getElementsByClassName("info-imc")[0];
    tdImc.textContent = imc;

    console.log(imc);
    };
};

2º - monta-paciente.js

function montaPaciente (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.altura != 0){
                        var imc = this.peso / (this.altura * this.altura);
                        return imc
                        } else {
                            console.log("Nao Posso Dividir por Zero");
                        }
                    }
    }
    }
    return paciente;
};

3º - percorre-array.js

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

        var pacienteTr = trsPacientes[posicaoAtual];

        comportamento(pacienteTr);
    };
};

Erros:

monta-paciente.js:21 - Uncaught SyntaxError: Illegal return statement

calcula-imc.js:3 - Uncaught SyntaxError: Unexpected token )

Jarom ,

o primeiro erro tem uma chave a mais no seu arquivo monta-paciente.js

ele está assim :

function montaPaciente (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.altura != 0){
                        var imc = this.peso / (this.altura * this.altura);
                        return imc
                        } else {
                            console.log("Nao Posso Dividir por Zero");
                        }
                    }
    }
    }
    return paciente;
};

quanto o certo seria :

function montaPaciente (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.altura != 0){
                        var imc = this.peso / (this.altura * this.altura);
                        return imc
                        } else {
                            console.log("Nao Posso Dividir por Zero");
                        }
                    }
    }
    return paciente;
    };

tenta arrumar esse , e veja se irá dar erro novamente .

Jarom, vou ter que te pedir desculpas, o segundo erro foi provocado por um erro meu, não percebi que a função era anônima.

Aquele novo parêntese que você colocou, deve vir no fim da função, após a chave de fechamento e antes do ponto e vírgula.

Tente assim:

percorreArray (pacientes, function(trsPacientes){

var imc = paciente.pegaImc();

var tdImc = pacienteTr.getElementsByClassName("info-imc")[0]; tdImc.textContent = imc;

console.log(imc); });

Com as alterações feitas continuo tendo erro:

Eis os códigos:

1º - calcula-imc.js

var trsPacientes = document.getElementsByClassName("paciente"); // Array de trs

percorreArray (pacientes, function(trsPacientes){

    var imc = paciente.pegaImc();

    var tdImc = pacienteTr.getElementsByClassName("info-imc")[0];
    tdImc.textContent = imc;

    console.log(imc)});
};

2º - monta-pacientes.js

function montaPaciente (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.altura != 0){
                        var imc = this.peso / (this.altura * this.altura);
                        return imc
                        } else {
                            console.log("Nao Posso Dividir por Zero");
                        }
                    }
    }
    return paciente;
};

3º - percorre-array.js

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

        var pacienteTr = trsPacientes[posicaoAtual];

        comportamento(pacienteTr);
    };
};

E o erro que aparece agora é: calcula-imc.js :11 Uncaught SyntaxError: Unexpected token }

Na última linha do calcula-mcs,js parece ter um }; fantasma...Ele é de alguma parte do código que você não colocou? Se não for, retire ele e veja se o erro persiste.

Hugo Vallada, se eu retiro esse }, passo a ter o seguinte erro:

calcula-imc.js:3 Uncaught ReferenceError: pacientes is not defined

solução!

Olá Jarom! Veja bem, vou utilizar os últimos códigos mandados por você para te ajudar.

Os erros de seu código estão no seu calcula-imc.js.

Primeiro, é necessário retirar a ultimo chave e o ponto e virgula, pois não deveria ser assim:

// restante do código

console.log(imc)});
};

Mas sim assim:

console.log(imc)});

Então se você tentar utilizar o código no seu browser verá o erro:

Uncaught ReferenceError: pacientes is not defined

Isso está ocorrendo porque você está tentando utilizar a variável paciente sem ela existir em su código, perceba que você em nenhum momento declarou essa variável.

A sua utilização da função percorreArray também está incorreta, perceba que você está passando como argumento uma variável pacientes que também não existe e como argumento da função anônima passada você está passando a array trsPacientes, que também está errado:

percorreArray (pacientes, function(trsPacientes){

// Restante do código

Veja bem, a função percorreArray, por você criada, recebe como 1º argumento um Array com as tags <tr> que possuem class = "paciente" . Então, essa array é percorrida e cada tag <tr> da Array é pega e atribuída a variável pacienteTr e é aplicado um comportamento passando essa variável como argumento. Esse comportamento é a função anônima que você declarou anteriormente em seu calcula-imc.

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

        var pacienteTr = trsPacientes[posicaoAtual];

        comportamento(pacienteTr);
    };
};

Então em seu calcula-imc, para chamar a função percorreArray o correto seria:

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

percorreArray (trsPacientes, function(pacienteTr){

// restante do código

Então, na função anônima, você põe o código que será executado com a variável pacienteTr que possui como valor atribuído uma tag <tr>.

O que esse código deve fazer?

Ele deve montar o paciente através da função montaPaciente(), calcular o Imc desse paciente chamando a função pegaImc() colocada como uma função do paciente e atribuir esse valor a tag <td> referente ao IMC.

Então montamos o paciente a partir da variável pacienteTr e atribuímos o paciente a uma variável da seguinte forma:

var paciente = montaPaciente(pacienteTr)

Depois calculamos seu IMC atribuindo a uma variável:

var imc = paciente.pegaImc();

Então pegamos a tag <td> que é o campo onde queremos mostrar o IMC do nosso paciente e atribuímos a uma variável:

var tdImc = pacienteTr.getElementsByClassName("info-imc")[0];

Então colocamos como conteúdo dessa tag o valor do imc do paciente:

trImc.textContent = imc;

E se for do seu desejo, também podemos colocar para esse valor ser mostrado no console do browser:

console.log(imc);

Assim seu calcula-imc irá funcionar perfeitamente, ficando ele de seguinte forma:

var trsPacientes = document.getElementsByClassName("paciente"); // Array de trs

percorreArray (trsPacientes, function(pacienteTr){
    var paciente = montaPaciente(pacienteTr)
    var imc = paciente.pegaImc();
    var tdImc = pacienteTr.getElementsByClassName("info-imc")[0];
    trImc.textContent = imc;
    console.log(imc);
    }
);

Enfim, espero ter ajudado. Bons estudos!

Romário, show de bola. Muito obrigado!

Só uma pequena correção:

Você colocou "trImc.textContent = imc;" e o certo é "tdImc.textContent = imc;"

Mas de resto deu certinho.

Valeeeu

Ah verdade! me atrapalhei kkkkkk. Mas que bom que você entendeu e conseguiu.

Bons Estudos!