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

Questões sobre if e else

Olá, tudo bem? Quando o if é usado sozinho ele não tem valor 'false' ou 'true'? Quando está sendo usado com o else, ele é sempre 'false' e o else é sempre 'true'? Por que o if precisa de parâmetro e o else não?

E acho que tenho essa questão de fora do tópico sobre if e else: Quando escrevemos o "bloco" - aquela parte que vai dentro dos {} no if e no else - as funções mostra ou o "comando" (perdoa eu não saber os nomes) - por exemplo: contador = contador +1 eu entendi que tem que colocar sempre esse "comando", esse "cálculo"... porque senão ou todos os números são expressos, sem funcionar a função if, ou trava, ou, como eu fiz, colocando um if a mais, apareceu um número repetido. Minha pergunta é: Por que tem que colocar essa soma sempre? (vou escrever ela aqui...)

` var contador = 30;

mostra("Vamos mostrar todos os números de 30 a 40, exceto os números 33 e 37, porque eu não gosto deles: ");

while (contador <= 40) {

if (contador == 33 && contador == 37) {
    contador = contador +1
}

else { 
    mostra(contador + ", ");
    contador = contador +1
}
if (contador == 40) {
    mostra (contador+ ".");
    contador = contador +1
}

} `

Por que temos que repetir tantas vezes o "contador = contador + 1" ?

2 respostas

Na minha concepção de iniciante, o parâmetro de if é a condição pra que ele seja realizado, por que sem uma condição em "se", os comandos repassados no bloco nem sequer acontecem. Essa condição pode ser ligada diretamente ao else já que qualquer coisa que vá contra a condição dada pelo if anterior vai ativar o bloco de comandos do else. Mas a condição de if é verdadeira mesmo que dentro dela tenha uma variável booleana falsa. Além disso, imagino que seja possível você declarar um if como falso em formato de variável.

if(tempo == false) { document.write("Errou !") }

Já para os contadores, eles são necessários para que o seu loop avance. Sempre que você lê um loop (while, for, setInterval) imagine os comandos do bloco do loop sendo executados em ordem.

   var contador = 30;

    while(contador <= 40) {

        if( contador == 33 ) {
        contador = contador + 1;
        }
        if(contador == 37) {    
            contador = contador + 1;
        }
        else {
        mostra(contador);
        contador = contador + 1; 
        }
      }

No caso, a estrutura da resposta do professor é ---> Declara o valor inicial do contador. Enquanto esse contador for menor ou igual a 40 executa o seguinte ---> : Imprime os números de 30 a 40, se o contador passar pelos números 33 e 37, ele pula aquele número. No caso, pra lógica fazer mais sentido seria legal ler o else primeiro na sua cabeça.

Exemplo ---> mostra o valor 30 (contador) | esse contador então passa a ser 30 + 1

mostra o valor de 31 | esse contador passa a ser 31 + 1

mostra o valor de 32 | esse contador passa a ser 32 + 1...

Sem o contador sendo atualizado, o valor ficaria estagnado. "Mostra o valor de 32." "Como não houve incremento, o valor se mantém 32."

Ou seja, o valor novo sempre será guardado pelo browser para ser utilizado no próximo comando.

Só que se o contador chegar em 33, ao invés dele ser impresso, a linha de código é imediatamente trocada pra 34, entende ? o 33 nunca chega a ver a luz do sol. Existem outras maneiras de pular o 33 mas essa solução do professor é bem interessante.

A única diferença é que o professor aplicou as exceções antes da regra, que nesse caso foi o else.

Mas existem vários casos onde podem existir dois if's e nenhum else ou variações disso, então não é bom se prender muito nisso, é melhor analisar a estrutura do código como um todo, indo passo a passo e pensando nos loops, condições, variáveis e funções como ferramentas para um fim, sem necessariamente se prender em "tenho que ter um else junto desse if..." ou preciso declarar isso por que no outro código foi assim.

Você pode ler o código como : "se(contador for igual a 33) { contador é 34 }"

Outra dica, use bastante o "++" nos seus códigos, economiza bastante tempo. Ao invés de escrever contador = contador + 1 fica mais fácil e rápido de ler contador++

Espero ter ajudado :)

solução!

Bruna,

  • 'if' em inglês significa 'se'. Verifica se uma condição é verdadeira ou falsa; no exemplo do professor:
if( contador == 33 ) {
    contador = contador + 1;
}

entenda como "se a variável contador for igual a 33, acrescente 1 a variável contador". 'if' neste caso testa uma condição(ser igual a 33), e se for atendida (verdadeira), executa uma ação.

  • 'else' significa senão; só é usada em complemento a um 'if'. 'else' exige uma condição também: a mesma do seu 'if'. Só que 'else' diz que algo será executado se a condição do seu 'if' não for atendida. De novo, no exemplo do professor:
if(contador == 37) {    
    contador = contador + 1;
}else {
    mostra(contador);
    contador = contador + 1; 
}

aqui, entenda: "se a variável contador for igual a 37, acrescente 1 à variável contador. senão, mostre na tela o valor de contador, e depois acrescente 1 ao valor de contador.

'else' só entra em ação se a condição verificada pelo 'if' não for verdadeira.


Quanto à questão do contador/incrementador, veja, você tem um problema: tem que exibir na tela números de 30 até 40, exceto 33 e 37. A solução do professor foi:

  • testar os números de 30 até 40, um de cada vez, para saber se aquele número seria um dos indesejados; começa pelo 30;
  • se for um dos indesejados, ele soma um (o que faz com que o número deixe de ser um indesejado);
  • se não for um dos indesejados (inclua aqui os que foram modificados pela ação anterior), ele mostra na tela;
  • depois de mostrar o número na tela, ele soma +1 a este número (para que ele se transforme no próximo número da lista), e volta ao topo desta testagem, repetindo os passos até chegar a 40.

Mudei o nome da variável do incrementador/contador, para facilitar o entendimento. Leia os comentários no próprio código:

<meta charset="UTF-8">
<script>
    function pulaLinha() {
        document.write("<br>");
    }

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

    var numeroDaVez = 30;   //começaremos pelo 30

    while(numeroDaVez <= 40) {  //repetirá até chegar a 40

        if(numeroDaVez == 33 ) {
            numeroDaVez = numeroDaVez + 1; //se era 33, passa a ser 34
        }

        if(numeroDaVez == 37) {    
            numeroDaVez = numeroDaVez + 1; // se era 37, passa a ser 38

        }else{      //se não for nem 33 nem 37 (nunca será - eles nunca chegam a este ponto ser serem transformados pelas linhas acima)
            mostra(numeroDaVez);        //mostra o número, e soma 1 pra testar o próximo da lista
            numeroDaVez = numeroDaVez + 1; 
        }
    }

    mostra("FIM");

</script>