Aquí nos quedamos con nuestro juego de lanzamiento de monedas.
Empezamos generando un número aleatorio entre 0 y 1,
y luego redondeamos ese número al entero más cercano.
Eso nos daba un número que era 0 o 1.
Y luego ilustramos nuestra moneda súper realista con una elipse que era morada o amarilla, dependiendo del número.
Y aquí está el código con el que hicimos eso.
Entonces dijimos si "integer" es igual a 0 rellena de morado, de otra manera, rellena de amarillo.
Y luego dibujamos la moneda aquí abajo.
Pero ahora he decidido que mi moneda tiene en realidad 3 lados. Sí, una moneda de 3 lados.
Así que déjenme agregar el tercer lado.
Voy a empezar por generar un número entre 0 y 2,
así que después de redondear eso, me regresará un entero que será 0, 1 o 2.
Pero si miramos nuestro código de dibujo, sólo estamos contemplando dos casos aquí.
Si el entero es 0, rellenará de morado, de otra manera, rellenará de amarillo.
Pero ahora, "de otra manera" puede significar 1 o 2.
Pero esperen, ¿qué pasa si hago lo mismo que hice antes?,
pero dentro de este bloque "else". Así que sólo voy a decir:
Si "integer" es igual a 1 entonces rellena de amarillo, como estaba antes,
"else" rellenaremos de rojo. Rojo está bien.
Entonces lo que esto significa es que si "integer" es igual a 0 el color será morado,
de otra manera, si es 1, el color será amarillo;
de otra manera, es decir, si no es 0, ni 1, debe ser 2 y rellenaremos de rojo.
Presiono "restart" muchas veces. ¡Funciona! ¡Yu ju!
Entonces si quiero añadir más lados a mi moneda,
Puedo ir aquí arriba y hacer esto de 0 a 3, y luego ir más adentro en el bloque "else" y añadir más "if-else" y así sucesivamente,
hasta que tengamos miles de bloques anidados.
Y sólo entonces me daré cuenta de que este código es desagradable, quiero decir ¡grotesco!
Se supone que un código debe ser fácil de leer y bonito, no lo más feo posible.
Así que esto es lo que vamos a hacer:
Cuando tengas una sentencia "if" simple o una sentencia "if-else" dentro de un bloque "else",
significa que no estamos haciendo nada más fuera de estos bloques,
no estamos eligiendo el color del trazo, no tenemos ninguna sentencia "if", nada.
Todo lo que tenemos es una sentencia "if", y probablemente contenga un bloque "else".
Entonces en realidad podemos combinar esta condición con la línea anterior y decir:
"else if integer is = 1" (de otra manera, si "integer" es igual a 1), y establecer el color amarillo para rellenar.
Y luego este bloque "else" del final, no está anidado en ningún lado, sólo llega al final por sí mismo.
¡Genial! Entonces lo que esto significa es: si "integer" es igual a 0 rellena de morado,
de otra manera si "integer" es igual a 1, rellena de amarillo,
de otra manera, si estas dos condiciones anteriores fueron falsas entonces rellena de rojo.
Si presiono "Restart" muchas veces, puedes ver que sigue funcionando.
¡Genial! Y lo interesante de esto es que podemos tener todos los "else-if" que queramos,
lo que me hace fácil añadir más lados en mi moneda.
Hagamos eso ahora. Voy a generar un número entre 0 y 3,
y luego voy a añadir otro bloque "else" que diga: de otra manera si "integer" es igual a 2
rellenaremos de... bueno antes era rojo, podemos dejar el rojo.
Y luego este último bloque "else" será para cuando "integer" sea igual a 3,
rellenaremos de azul. ¡Genial!
Muy bien. Así que para hacer esto, siempre tienes que empezar con una sentencia "if",
y luego puedes tener todos los "else-if" que quieras,
y luego este último es opcional.
En realidad podemos hacerlo sin este último, y es posible que todo esto sea falso,
entonces no se ejecutará ninguno de estos bloques.
Pero por la manera como lo tenemos ahí, entonces se ejecutará exactamente uno de estos bloques.
¿Está bien? Ahora bien, este es un caso en el que no importa si dices "if else-if else-if else",
o simplemente usar la vieja y simple sentencia "if", como la teníamos en el principio: si "integer" es igual a 3.
Y eso es porque es imposible para "integer" ser igual a 0 y luego ser igual a 1, 2 o 3.
¡Genia! Así que estas condiciones son mutuamente excluyentes.
De cualquier manera sólo uno de estos bloques se ejecutará.
Pero no siempre tenemos este caso.
¿Qué pasa si tratamos de hacer un juego como éste pero sin redondear a un entero?
Así que me voy a deshacer de esta parte donde redondeamos,
y de esta otra parte donde lo dibujamos en la pantalla.
Y déjenme hacer nuevas reglas para mi juego.
Entonces estoy generando un número entre 0 y 3,
ponemos más marcas en nuestra recta numérica.
Entonces digamos que si el número cae entre 0 y 1 rellenaremos de morado.
Oh, eso no parece una "p". (purple=morado) Bueno... entienden. Ok.
Y luego si está entre 1 y 2, lo rellenamos de amarillo.
Y si está entre 2 y 3, lo rellenamos de rojo.
¡Genial! Entonces veamos cómo podemos hacer eso con "if" y con "else-if´s".
Puedo empezar por decir si "number" es menor que 1,
si es menor que 1, y sé que está entre 0 y 3, entonces debe estar en este rango,
entonces selecciono el morado para rellenar.
De otra manera, si "number" es menor que 2, selecciono el amarillo para rellenar... 255...
Y de otra manera, relleno con rojo.
¡Genial! Y funciona de la manera prevista.
Así que si "number" es menor que 1, entonces otra vez está en este rango.
De otra manera, es mayor o igual que 1, pero también es menor que 2,
eso lo pone en este rango, así que vamos a rellenar de amarillo.
De otra manera, "number" debe ser mayor o igual que 2, así que cae en este rango.
Y aquí hay un caso en el que no podemos decir simplemente que si "number" es menor que 2,
y si "number" es menor que 3,
porque si "number"es menor que 1, entonces es definitivamente menor que 2
y también será menor que 3.
Así que nuestra moneda terminará siendo roja siempre.
Y es por eso que en este caso es realmente útil usar "else-if".