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

Porque o while se temos o for?

Qual a necessidade do while se o for é mais simples de usar? Ou o while tem outros usos que não convém ao exemplo do curso?

5 respostas

Boa noite!

Ao utilizar o WHILE em um laço, ao atender a condição definida, o laço é imediatamente terminado. Ele executa o laço ENQUANTO a condição não é atendida.

Ao utilizar o FOR, o laço será executado até o seu final, mesmo que a condição definida já tenha sido atendida.

Espero ter elucidado.

Você poderia me dar um exemplo Adriano?

Acredito que no exemplo do curso não faz muita diferença, porque a condição sempre termina ao percorrer todo o array:

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

var posicaoAtual = 0;

while(posicaoAtual <= trPacientes.length - 1) {
//for (var posicaoAtual = 0; posicaoAtual <= trPacientes.length - 1; posicaoAtual++){
    var pacienteTr = trPacientes[posicaoAtual];

    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};

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

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

        console.log(imc);

    }else{
        console.log("A altura deve ser diferente de zero!");
    }
    posicaoAtual++;
}
solução!

Bem, não me ative no contexto do curso, mas vamos lá!

Whilhe: enquanto a condição de parada P não seja atendida, execute uma operação X.

For: execute uma operação X até um limite L pré-definido.

Estudo de caso: busca por aluno.

Imagine que temos de consultar um vetor de alunos e estamos buscando um determinado aluno X.

Caso opte por implementar com o WHILE, a condição seria: - enquanto aluno for diferente de X, vá para o próximo. Ao encontrar o aluno, o laço será encerrado e a próxima instrução será executada.

Caso opte por implementar com o FOR, a condição seria: - dado o índice inicial, até o final, teste se o aluno é igual a X. Nesse caso, mesmo que o aluno fosse encontrado no início ou meio do vetor, o laço só terminaria quando o vetor fosse percorrido até o final desnecessariamente.

Espero ter ajudado.

Ok Adriano, perfeito! Dependendo do caso então, posso até "economizar" em velocidade ao implementar o while...

Enfim, obrigado pela ajuda, ficou bem explicado! =)

Só complementando, qualquer repetição pode ser escrita com qualquer um dos 3 laços existentes (for, while, do while) mas precisará alterações na lógica usando cada um para que sai o mesmo resultado.

Note que dependendo do que seu código está fazendo, logicamente poderá ser mais simples usar um do while, e tentar fazer com um for poderá requerer ajustes na lógica de controle do laço. De forma similar, uma situação clara com um for, pode requerer ajustes lógicos para executar com um while ou do while.