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]