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

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

Fala Galera !

Tudo bem?

Bom, a minha dúvida é a seguinte: Como eu sofro de ansiedade : - | ahahah eu já havia criado uma estrutura de funções antes mesmo de assistir a aula sobre funções desse curso. Uma das coisas que me chamou a atenção foi a utilização do "this." e poder passar uma função como parâmetro para outra função. Como eu já havia montado uma estrutura de funções, eu tive uma certa dificuldade para implementar essa ideia no meu código. Diante dessa situação, eu vou colar aqui o código do meu arquivo js.


//Retorna a lista de pacientes existentes
function selecionaPaciente(){

    var listagemDePacientes = document.getElementsByClassName("paciente");
    return listagemDePacientes;
}

//Função para selecionar os elementos de um único paciente
function selecionaTdsDoPaciente(posicaoAtual){

    var listaDePacientes = selecionaPaciente();
    var pacienteTR = listaDePacientes[posicaoAtual];

    var tdNome = pacienteTR.getElementsByClassName("info-nome")[0];
    var tdPeso = pacienteTR.getElementsByClassName("info-peso")[0];
    var tdAltura = pacienteTR.getElementsByClassName("info-altura")[0];
    var tdImc = pacienteTR.getElementsByClassName("info-imc")[0];
    var tdDiagnostico = pacienteTR.getElementsByClassName("info-diagnostico")[0];

    var paciente = {
        nome : tdNome.textContent, 
        peso : tdPeso.textContent, 
        altura : tdAltura.textContent, 
        imc: tdImc, 
        diagnostico : tdDiagnostico};    

    return paciente;    
}

//Realiza o Cálculo do IMC
function calculaIMC(){

var listaTrsPacientes = selecionaPaciente();

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

    var paciente = selecionaTdsDoPaciente(posicaoAtual);


    if (paciente.altura != 0 ){
        var resultado_imc = paciente.peso / (paciente.altura * paciente.altura);
        paciente.imc.textContent = resultado_imc;

        classificaImc(paciente,resultado_imc);

    }else{

        alert("Impossível de calcular seu IMC ");
    }
}

}

//Função para classificar IMC
function classificaImc(paciente, imc){

    if(imc < 19.1){

            paciente.diagnostico.textContent = "abaixo do peso";    

        }else if(imc > 19.1 && imc <= 25.8){

            paciente.diagnostico.textContent = "No peso normal";

        }else if(imc > 25.8 && imc <= 27.3){

            paciente.diagnostico.textContent = "Marginalmente acima do peso";

        }else if(imc > 27,3 && imc <= 32,3){

            paciente.diagnostico.textContent = "Acima do peso";

        }else{

            paciente.diagnostico.textContent = "Obeso, pare de Comer Oxe!!!";
        }

}

__


De que maneira eu posso melhorar esse código ?

3 respostas
solução!

Oi Nathalia, tudo bem? Algumas idéias você pode tirar do seguinte pensamento: Cada coisa está no seu lugar?. Mas isso ainda é muito vago certo? Então pense comigo. Faz sentido ter alguem que calcula meu IMC ou eu mesmo posso fazer isso? Os dois fazem sentido, mas depende do contexto! O que eu faria no nesse caso?

O paciente pode calcular seu próprio IMC. Então pode ser feito algo assim:

var paciente = {
    CalculaIMC : function(){
        return  this.peso / (this.altura * this.altura)
    }
}

Você também pode ter um outro objeto que classifica o IMC do paciente e retorna a classificação.

var classificaImcPaciente = function(paciente){
    //ifs com return
}

Com esses dois pontos, em alguns lugares seu código vai ficar algo do tipo:

paciente.classeIMC = classificaImcPaciente(paciente);

Perceba que o classeIMC é um atributo que sera resultado da funcão que classifica. O classificaImcPaciente não precisa calcular o IMC já que o paciente já sabe calcular! Isso quer dizer que o classificaImcPaciente vai fazer algo como:

imc = paciente.calculaIMC();
if(imc < 19){
    ....
}

Outro ponto: Esse valores dentro do classificador têm um certo significado, não são números jogados sem importancia, crie variaveis para representar esses valores! algo tipo:

var classificadorAcimaDoPeso = 25;

Acho que já é um bom começo! Qualquer dificuldade, por favor, não espere, poste sua dúvida!

Espero ter ajudado, bons estudos!

Esse Wanderson Macêdo se garante :-D !!!

Entendi tudinho, eu não havia olhado com essa perspectiva.

Ótima explicação !

Obrigada.

Que bom ter entendido e gostado da explicação, qualquer dúvida pode abrir tópico no forum que a gente tá por aqui para auxiliar!

OBS: Se garante nada! (rsrs) Obrigado pelos elogios!