programandoai

Bifurcações: se isto, então aquilo

Toda decisão real segue essa mesma forma: se estiver chovendo, leve guarda-chuva; senão, não leve. Programas fazem isso o tempo todo, e é a primeira vez que o computador realmente 'escolhe' um caminho.

Estudar esta lição interativa →

Até aqui, todo programa que você escreveu rodou sempre do mesmo jeito, de cima para baixo, sem escolher nada. Mas a maioria dos problemas reais precisa de um programa que se comporte diferente dependendo da situação: um sistema de frete não cobra o mesmo valor para qualquer peso; um jogo não dá a mesma resposta para qualquer palpite. Para isso, todo raciocínio de programação usa a mesma estrutura básica que você já usa na vida: "se isto acontecer, faça aquilo; senão, faça outra coisa".

let estaChovendo = true;

if (estaChovendo) {
  console.log("Leve o guarda-chuva.");
} else {
  console.log("Pode ir sem guarda-chuva.");
}

Troque o valor de estaChovendo para false e rode de novo.

A palavra if ("se", em inglês) testa uma condição: uma pergunta que só pode ter duas respostas, verdadeiro ou falso. Se a condição for verdadeira, o bloco entre chaves { } logo abaixo do if roda; se for falsa, o computador pula direto para o bloco do else ("senão"), quando ele existir. Só um dos dois blocos roda, nunca os dois ao mesmo tempo.

Pense num porteiro de prédio com uma única regra: "se a pessoa mora aqui, deixe entrar; senão, peça identificação". Ele não faz as duas coisas ao mesmo tempo, e a decisão dele depende inteiramente da resposta a uma pergunta de sim ou não. Um if/else é exatamente esse porteiro, só que dentro do seu programa.

Para formar essas perguntas de sim ou não, usamos operadores de comparação: > (maior que), < (menor que), >= (maior ou igual), <= (menor ou igual), === (igual a) e !== (diferente de). Cada um deles, aplicado a dois valores, devolve verdadeiro ou falso: idade >= 18 pergunta "idade é maior ou igual a 18?", e a resposta vira a condição do if.

Por que === e não só =

O JavaScript usa três sinais de igual, ===, para comparar dois valores, exatamente para não confundir com o = de atribuição do Módulo 2, que guarda um valor. Outras linguagens fazem essa mesma distinção com símbolos próprios; o que nunca muda é a ideia: comparar é diferente de guardar, e confundir os dois é uma das pegadinhas mais clássicas de toda a programação.

A pegadinha mais famosa: = dentro de um if

Escrever if (idade = 18), com um sinal só, não compara nada: ele atribui o valor 18 à variável idade, ali mesmo, dentro do parêntese do if. E, como 18 não é zero, o computador trata esse resultado como verdadeiro, então o bloco do if roda sempre, não importa o valor que idade tinha antes. É um erro silencioso, sem mensagem de aviso, e por isso um dos mais traiçoeiros para quem está começando. A correção é sempre a mesma: dentro de um if, use ===, nunca =.

let idade = 16;

if (idade = 18) {
  console.log("Maior de idade.");
} else {
  console.log("Menor de idade.");
}

Troque = por === dentro do if e rode.

← Voltar ao índice do curso