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

Comportamento de uma atribuição dentro de da função if()

Eu compreendi a proposta do exercício, de ensinar que deve-se utilizar == para igual e = para atribuição (recebe), mas não compreendi exatamente como funciona esse comportamento de uma atribuição como condição de if, e o porquê de dar sempre true.

Seria o caso de que na verdade a condição é lida e executada como se de fato fosse uma atribuição? Então, como a atribuição ocorreu normalmente, leu-se true?

Ou seria o caso de que o programa verificou e atestou que realmente essa atribuição aconteceu em algum momento, lendo-a, de fato, como uma condição para algo? Nesse caso, o true não faria sentido, porque essa atribuição não aconteceu antes no programa.

Ou ainda o caso seria de que na verdade a condição é nula, e o if() entende que precisa executar o que quer que esteja no bloco, porque nenhuma condição foi determinada? Como a condição não seria de fato uma condição, o programa entende que precisa executar sempre o que quer que esteja no bloco, porque a condição é nula?

E ainda: Quando atribuímos um valor a uma variável ou o valor de uma variável a outra variável, isso é lido, mesmo dentro da condição de if(), como uma atribuição que está sendo executada ali, naquele momento, e passará a valer a partir de então? Ou seja, o novo valor da primeira variável será o valor que for determinado na atribuição? Seria o mesmo que fazer a atribuição fora do campo de condição de if()?

<meta charset="UTF-8">

<script>

    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    var quantidadeCarbono1 = parseInt(prompt("Quantidade de carbono substância 1"));
    // exemplo
    // quantidadeCarbono1 = 1
    var quantidadeCarbono2 = parseInt(prompt("Quantidade de carbono substância 2"));
    // exemplo
    // quantidadeCarbono2 = 8

    quantidadeCarbono2 = quantidadeCarbono2 + 2;
    // quantidadeCarbono2 = 8 + 2

    if(quantidadeCarbono1 = quantidadeCarbono2 ) {
        // quantidadeCarbono1 = 10 (true?)
        mostra("Acho que são substâncias parecidas");
    } else {

        mostra("São substâncias bem diferentes");
    }

</script>
2 respostas
solução!

Fala! Roodney. Beleza ?

Desculpe a demora no retorno.

A estrutura condicional if irá permitir ao javascript executar determinado trecho do código apenas se uma determinada condição for verdadeira. E o javascript considera como condição verdadeira qualquer valor que seja diferente de zero. Ou seja, se dentro do nosso if houver uma variável que tenha qualquer coisa, podendo ser um número, ou uma string, será considerado como condição verdadeira, e o if será executado.

Por exemplo:

    <script>
        var teste = 0;

        if(teste){
           alert("teste");
        }

    </script>

Esse código não irá exibir nada na tela, porque a condição do if é falsa. Uma vez que o zero é considerado também como uma condição falsa. Entretanto, se fizermos uma mudança no código, da seguinte maneira:

    <script>
        var teste = 1;

        if(teste){
           alert("teste");
        }

    </script>

Irá aparecer um alert na tela, com a mensagem “teste”. Logo, qualquer valor diferente de zero dentro do if será considerado verdadeiro.

O que está acontecendo no exercício que você enviou é a mesma coisa. No caso, os valores estão sendo lidos do teclado e armazenados nas variáveis quantidadeCarbono1 e quantidadeCarbono2. E dentro do if A variável quantidadeCarbono1 está recebendo os valores de quantidadeCarbono2. Ou seja, se a variável quantidade Carbono 2 for qualquer número diferente de zero (no seu exemplo é 8) , quando a atribuição for feita, o if sempre irá considerar essa condição como verdadeira, porque vai existir algum número ali dentro (se ele for diferente de zero). A questão toda desse exercício, é que mesmo que sejam digitados dois números diferentes em relação a quantidade de carbono, nunca será feita a comparação, mas sim a atribuição, e o programa irá exibir a informação errada de que as quantidades são iguais.

Sobre a sua outra pergunta, podemos sim fazer a atribuição fora do if e utilizar uma variável para fazer a verificação da condição. Se a condição for nula, o if não será executado, e o programa não entrará nesse bloco.

Um outro detalhe, se você fizer uma atribuição dentro do if igual ao exercício, o valor da variável quantidadeCarbono1 será atualizado também, portanto se você utilizar essa variável em outros trechos do código, ela estará com o valor novo, ou seja, o valor de QuantidadeCarbono2 + 2.

Qualquer outra dúvida fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Muito obrigado pela resposta! Me ajudou bastante!