Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre function e boas práticas.

Bom dia/boa tarde/boa noite.

Conforme mencionado pelo professor, separar algumas funcionalidades do seu código é bom pois fica mais legível. Na parte de calcular o IMC, eu criei duas funções a mais(além da que calcula o imc): uma para verificar o peso, e outra para verificar a altura.

O código está funcionando, beleza. A Minha dúvida é a seguinte: O meu código está bom? Fiz da forma correta?(principalmente a parte de adicionar a classe ".paciente-invalido"). O que eu poderia alterar?

Segue o código:

pacientes = document.querySelectorAll(".paciente");

for(n = 0; n < pacientes.length; n++){

    paciente = pacientes[n];

    var qtPeso = paciente.querySelector(".info-peso").textContent;
    var qtAltura = paciente.querySelector(".info-altura").textContent;
    var imc = paciente.querySelector(".info-imc");
    imc.textContent = calculaImc(qtPeso, qtAltura);

    var pesoInvalido = verificaPeso(qtPeso, imc, paciente);    
    var alturaInvalida = verificaAltura(qtAltura, imc, paciente);    
}

function calculaImc(peso, altura){

    var imc = peso / (altura * altura);
    return imc.toFixed(2);
}

function verificaPeso(peso, imc, paciente){

    if (peso <= 0 || peso > 200){
         imc.textContent = "Peso inválido";         
         paciente.classList.add("paciente-invalido");                
    }    
    return imc;
}

function verificaAltura(altura, imc, paciente){    

    if (altura <= 0 || altura > 3.0){
         imc.textContent = "Altura Inválida";
         paciente.classList.add("paciente-invalido");                
    }    
    return imc;
}


Agradeço a atenção. Abrçs!

1 resposta
solução!

Fala Rodrigo, Tudo beleza?

Foi interessante essa solução em quebrar a validação do peso e altura em 2 funções. Foi uma refatoração: Cada uma com sua responsabilidade.

O código está legal. Porém sugiro você remover o return das 2 funções que você criou. Não está coerente você retornar o imc nas funções de validação de peso e altura. Elas possuem apenas a responsabilidade de validar peso e altura, quem deve retornar o IMC é a calculaImc. Beleza?

Deixaria elas assim:

function verificaPeso(peso, imc, paciente){

    if (peso <= 0 || peso > 200){
         imc.textContent = "Peso inválido";         
         paciente.classList.add("paciente-invalido");                
    }    
}

function verificaAltura(altura, imc, paciente){    

    if (altura <= 0 || altura > 3.0){
         imc.textContent = "Altura Inválida";
         paciente.classList.add("paciente-invalido");                
    }    
}

No for alteraria esta parte:

Antes:
var pesoInvalido = verificaPeso(qtPeso, imc, paciente);    
var alturaInvalida = verificaAltura(qtAltura, imc, paciente);

Depois:
verificaPeso(qtPeso); 
verificaAltura(qtAltura);

Qualquer dúvida é só falar. Bons estudos!