1
resposta

Executei toda a função em um 'for', gastando 28 linhas. Mas não sei se é uma boa pratica.

var titulo = document.querySelector(".titulo"); titulo.textContent = "Aparecida Nutricionista";

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

function preencheImc(){

for (var i = 1; i < pacientes.length; i++){
    var paciente = document.querySelector("#paciente" + i);
    var tdPeso = paciente.querySelector(".info-peso");
    var peso = tdPeso.textContent;
    var tdAltura = paciente.querySelector(".info-altura");
    var altura = tdAltura.textContent;
    var tdImc = paciente.querySelector(".info-imc");
    var imc = peso/(altura * altura);

    if(peso < 0 || peso > 1000){
        tdImc.textContent = "Peso Inválido";
    }

    else if(altura < 0.30 || altura > 2.5){
        tdImc.textContent = "Altura Inválida";
    }
    else{
        tdImc.textContent = Math.round(imc);
    }
}

}

preencheImc();

1 resposta

Oi João!

Realmente, uma boa prática seria colocar todas essas 28 linhas em uma função que recebe como parâmetro o índice do for dessa forma:

function preencheImcs(){
    for (var i = 1; i < pacientes.length; i++){
        calculaImc(i);
    }
}

function calculaImc(indice) {
    var paciente = document.querySelector("#paciente" + indice);
    var tdPeso = paciente.querySelector(".info-peso");
    var peso = tdPeso.textContent;
    var tdAltura = paciente.querySelector(".info-altura");
    var altura = tdAltura.textContent;
    var tdImc = paciente.querySelector(".info-imc");
    var imc = peso/(altura * altura);

    if(peso < 0 || peso > 1000){
        tdImc.textContent = "Peso Inválido";
    }

    else if(altura < 0.30 || altura > 2.5){
        tdImc.textContent = "Altura Inválida";
    }
    else{
        tdImc.textContent = Math.round(imc);
    }
}

preencheImcs();

Dessa forma, todo o cálculo do IMC foi realizado pela função específica calculaImc. Falando em boas práticas, podemos notar que a calculaImc na verdade tem 2 responsabilidades: ela calcula o IMC e preenche o tdImc, mas faria mais sentido se a segunda fosse responsabilidade da função preencheImcs. Tente fazer isso como um desafio!

Espero ter ajudado. Se tiver mais alguma dúvida pode postar aqui. :)