Aqui está onde paramos com nosso jogo da moeda.
Começamos gerando um número aleatório entre 0 e 1,
e então arredondando o número para o inteiro mais próximo.
Então isto nos deu um número que era ou 0 ou 1.
E então nós ilustramos nossa moeda super-realista com esta elipse
que era ou roxa ou amarela, dependendo de qual número era.
E aqui está o código onde fizemos isso.
Dissemos que se o inteiro é igual a 0 defina a cor de preenchimento para roxa,
caso contrário, defina como amarelo.
E então desenhamos uma moeda aqui.
Mas agora eu decidi que na verdade, minha moeda tem três lados.
Sim, uma moeda de três lados.
Então vamos adicionar um terceiro lado.
Começarei fazendo um número de 0 a 2,
depois que arrendondarmos isso, ele me dará um inteiro que será 0, 1 ou 2.
Mas se olharmos para o código de desenho,
estamos contando apenas para dois casos aqui.
Então se o inteiro é 0, torne-a roxa, caso contrário, torne-a amarela.
Mas agora, 'caso contrário' pode significar ou 1 ou 2.
Mas espere, e se eu fizesse a mesma coisa que fizemos antes,
mas dentro deste bloco else. Então escreverei apenas:
if integer é igual a 1 então defina a cor de preenchimento para amarela,
como era antes.
else, definiremos a cor para vermelha. Vermelho está muito bom.
O que isso significa é, se integer é igual a 0, defina a cor para roxo.
caso contrário, se é igual a 1, nós a tornaremos amarela.
senão, ou seja, se não for 0, não for 1, deve ser 2, tornaremos a cor vermelha.
Pressiono reiniciar um monte de vezes. Funciona!
Logo, se quisermos adicionar mais lados à minha moeda,
eu posso subir aqui, e fazer de 0 até 3, e depois aprofundar o bloco else
e adicionar mais if-else's e assim por diante,
até eu ter zilhões de blocos aninhados.
E apenas depois eu vou perceber que este código está nojento! Quero dizer, grosso!
O código deve ser fácil de ler e bonito, não tão feio quanto possível.
Por isso, isto é o que vamos fazer:
Sempre que você tiver apenas uma declaração if única
ou uma declaração if-else dentro de um bloco else
tal que signifique que não faremos nada mais fora destes blocos,
não estamos definindo a cor do traço, não temos mais declarações if, nada.
Tudo que temos é essa única declaração if,
e talvez ela venha com um bloco else.
Depois, podemos combinar esta condição com a linha anterior e dizer:
else if integer é igual a 1, defina a cor de preenchimento para amarelo.
e este último bloco else não está aninhado em lugar algum,
apenas vem bem no final por si só.
Ótimo!
Agora isso significa que, se integer é igual a 0, defina a cor para roxo,
caso contrário se integer é igual a 1, defina a cor para amarelo,
caso contrário, ou seja, se ambas forem falsas, então defina-a para vermelho.
Pressiono reiniciar um monte de vezes e você pode ver que ainda funciona
Ótimo! E a coisa legal disso é que podemos ter quantos else-if 's quisermos,
o que torna muito fácil para mim adicionar mais lados à minha moeda.
Então vamos fazer isso agora. Farei um número entre 0 e 3,
e então apenas adicionarei um bloco else a mais: else if integer é igual a 2.
Definiremos a cor de preenchimento para...
bem, estava vermelha antes então vamos mantê-la.
Depois, este último bloco else será para quando um integer for igual a 3,
ele o tornará azul. Ótimo!
Tudo certo. Então...
para que façamos isso, você sempre terá que começar com uma declaração if ,
e depois você pode ter quantos else-if 's quiser,
e então este último cara é opcional.
Na verdade, podemos fazer sem ele, e é possível que todos estes sejam falso,
então nenhum destes blocos é executado.
Porém, contanto que tenhamos aquilo lá,
então exatamente um destes blocos será executado.
Legal? Agora este é o caso onde você diz: if else-if else-if else,
ou apenas usa as boas e velhas declarações if como tínhamos no início,
então se o integer é igual a 3.
E isso é porque nunca é possível para integer ser igual a 0, e também 1, 2 ou 3.
Ótimo. Então essas condições são mutuamente exclusivas.
Sempre, apenas um destes blocos irá executar de qualquer forma.
Mas esse não é sempre o caso.
E se tentarmos criar um jogo como este sem arrendondar um inteiro?
Vou me livrar desta parte onde nós o arredondamos,
e a outra parte onde nós desenhamos a tela.
E vamos criar algumas regras novas para o meu jogo.
Então ainda estou gerando um número entre 0 e 3,
ponha mais alguma marca de escala na linha de número.
Vamos dizer que se o número cair entre 0 e 1 nós o tornaremos roxo.
Oh, isso não parece mesmo com um 'p'. Você entendeu.
E se cair entre 1 e 2, podemos fazê-lo amarelo.
E se cair entre 2 e 3, nós o tornaremos vermelho.
Ótimo. Vamos ver como podemos fazer isso com if e else-if 's
Eu posso começar dizendo se um número é menor que 1,
então se é menor que 1, e eu sei que é entre 0 e 3,
então deve estar neste intervalo,
depois, eu definirei a cor de preenchimento para ser roxa.
Senão, se o número é menor que 2, posso definir a cor de preenchimento
para ser amarelo... 255...
E caso contrário, definirei o preenchimento para ser vermelho.
Ótimo. Funciona exatamente como pretendido.
Se um número for menor que 1, então novamente, está neste intervalo.
Caso contrário, ser for mair que ou igual a 1, mas for menor que 2,
tal que o ponha neste intervalo, iremos definir a cor para amarelo.
Senão, ele será maior ou igual a 2, então cairá naquele intervalo.
E aqui está um caso que não poderíamos dizer if number < 2,
e if number < 3,
porque se number é menor que 1, então será definitivamente menor que 2,
e também será menor que 3.
Então nossa moeda sempre irá terminar em vermelho,
e é por isso que neste caso, é realmente útil termos else-if.
[Legendado por: Carlos A. N. C. R.] [Revisado por: Fernando dos Reis]