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

Não utilizei '&&', conforme foi orientado na aula, mas funcionou. Qual a diferença de utilizar ou não '&&'?

Olá! Eu propus outra forma de executar as condições de avaliação do IMC. Durante a aula, foi orientado a utilizar '&&' na condição de valor entre 18.5 a 35. Funcionou, mas gostaria de saber como a mudança afetou o processo.

Na aula: if(imc >= 18.5 && imc <= 35) {}

Minha proposta: if(imc >= 18.5 <=35) {}

<meta  charset="utf-8">

<script>

    function pulaLinha() {

        document.write("<br><br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    function calculaImc(altura, peso) {

        return peso / (altura * altura);
    }


    var nome = prompt("Informe o seu nome");
    var alturaInformada = prompt(nome + ", informe sua altura");
    var pesoInformado = prompt(nome + ", informe seu peso");
    var imc = calculaImc(alturaInformada, pesoInformado);

    mostra(nome + ", seu IMC é " + imc);

    if(imc < 18.5) {

        mostra("Você está abaixo do recomendado.");
    }

    if(imc > 35) {

        mostra("Você está acima do recomendado.");
    }

    if(imc >= 18.5 <=35) {

        mostra("Seu IMC está excelente!");
    }

</script>

Desde já, obrigado :)

2 respostas
solução!

Olá Joab, boa tarde!

*Resolução do Problema: *

De acordo com a sua pergunta, mesmo não utilizando o operador "&&", você gostaria de saber como essa mudança afetou o processo da lógica proposta.

*Solução do Problema: *

De fato, ele realmente funcionou sem o operador "&&", mas ela afeta e muito a lógica do algoritmo. O intuito do programa é saber o imc de uma pessoa, sendo estabelecido um limite minimo e máximo que se pode alcançar para determinar sua condição (se esta acima dele, no recomendado ou abaixo). No if do professor há essa verificação:

if (imc >= 18.5 && imc <= 35) {
 //lógica do professor
}

// Perceba que no if logo acima, a primeira condição a ser verifica é se imc é maior ou igual a 18.5 
// (que por sua vez é um valor fixo), o valor que será retornado dessa condição é true. Nota: Esse exemplo abaixo
// é só para ilustrar o que esta acontecendo por "debaixo dos panos".

if (true && imc <= 35) {

}

// Depois dela, vem o operador "&&",  que diz ao javaScript que há outra condição nesse mesmo if e que ele
// só vai entrar no bloco do if, se as duas condições forem true. Na segunda condição, ele verifica se
// o valor do imc é menor ou igual a 35, supondo que  ele seja menor,  o valor retornado será true. Que no final ele ficara assim:

if (true && true) {
    // ele entra aqui dentro se as duas forem true
}

Nota: "O javaScript lê" o código de cima para baixo e da esquerda para a direita. Sabendo disso, vamos ver o erro da sua lógica. :

if (imc >= 18.5 <= 35)  {

}

// Como não há um operador "&&" na condicional if, a primeira operação ser feita será se o imc é maior 
// ou igual a 18.5. O valor que será retornado dessa operação será true. Ficando assim: 

if (true <= 35)  {

}

// Nisso, ele irá verificar se  o valor que foi retornado da operação anterior (que por sua vez foi true) é menor 
// ou igual a 35.  O valor que será retornado dessa operação sera true, mas por que true?
// como ele retornou true se  um valor é booleano e o outro é numérico?  

// A resposta é simples, o valor numérico de true é 1 e o valor numérico de false é 0.
// (nota: o valor que é igual e não o tipo). Veja esses exemplos e refaça: 

true == 1 // return --> true
true === 1 // return --> false

false == 0 // return --> true
false === 0 // return --> false

Ou seja, se o valor numérico de true é 1, logo é como se ele tivesse fazendo a seguinte operação:

// Disso daqui 
if (true <= 35)  {

}

// Por "debaixo dos panos vira isso aqui: "
if (1 <= 35)  {

}

E como 1 é menor que 35, ele retorna true e entra na condicional do if.

*Conclusão: *

É de concluir que na sua lógica não há devida verificação de um limite minimo e máximo que se pode alcançar para determinar a condição (se esta acima dele, no recomendado ou abaixo) de seu usuário.

*Despedida: *

Tenha um bom estudo, se ainda houver dúvidas, farei o possível para responde-las.

Muito obrigado, Carlos. Agora consegui entender.