Condicionales

Volver al ͍ndice

Los condicionales, son una de las estructuras básicas de control del flujo de ejecución de un programa. Sirven para que el programa decida si ejecuta un conjunto de instrucciones o no, o ejecuta otro en su lugar.

Existen varias formas de condicional, pero nosotros de momento nos vamos a concetrar en la más común de todas:

La sentencia condicional if

La estructurá básica de una sentencia if es la palabra clave if seguida de una expresión entre paréntesis que contiene la condición a comprobar. Si la condición resulta ser verdadera las instrucciones, colocadas entre llaves, que siguen se ejecutarán. Si la condición no se cumple, resulta ser falsa, dichas instrucciones no se ejecutarán.

Veamos un ejemplo:

var num:Number = 5;

if (num == 5) {
	trace("num es igual a 5");
}

Como probablemente habréis deducido ya, este pequeño programa hará aparecer en la consola lo siguiente:

num es igual a 5

Pero no sólo podemos comprobar si un número es igual a otro, también podemos comprobar si es mayor o menor

 
var num:Number = 5; 
if (num > 3) {
	trace("num es mayor que 3");
}
if (num < 3) {
	trace("num es menor que 3");
}

Todavía hay 4 operaciones comunes más que se pueden realizar dentro de la expresión que se pone entre paréntesis en el condicional. La siguiente tabla las resume:

Operador Expresión de ejemplo Descripción
== num == 10 Es verdadero (true) si el valor de num es exactamente igual a 10 y falso (false)si no lo es
!= nombre != “Pedro” Es verdadero si (true) si el valor de nombre es distinto de "Pedro" y falso (false) es igual a "Pedro"
> num > 10 Es verdadero (true) si el valor de num es mayor que 10 y falso (false) si es igual o menor que 10
< num < 10 Es verdadero (true) si el valor de num es menor que 10 y falso (false) si es igual o mayor que 10
>= num >= 10 Es verdadero (true) si el valor de num es mayor o igual a 10 y falso (false) si es menor que 10
<= num <= 10 Es verdadero (true) si el valor de num es menor o igual a 10 y falso (false) si es mayor que 10

Ramificación del flujo del programa con ifelse

A veces no sólo queremos comprobar si una condición se cumple para realizar ciertas acciones. También puede ser que queramos ramificar la ejecución del programa de forma que, si se cumple cierta condición, se ejecute una parte del programa y, si no se cumple, se ejecute otra. Para esto podemos añadir un else después del cierre de llaves del if
Ejemplo:
Suponed que tenemos varias instancias de un símbolo clip de película en la escena:
condicionales 01a

// Además tenemos un array instancias que las contiene.
var instancias:Array = [pelota01, pelota02, pelota03, 
					 pelota04, pelota05, pelota06, 
					 pelota07, pelota08, pelota09, pelota10];
// Sabemos sus nombres y queremos realizar una serie de acciones para una de ellas 
// y otras para todas las demás...
for (var i:int = 0; i &lt; instancias.length ; i++) 
{
    if(instancias[i].name == &quot;pelota03&quot;) 
    {
        instancias[i].x =  i*50 +30;
        instancias[i].y = 100;
    }
    else
    {
        instancias[i].x = i*50 +30;
        instancias[i].y = 200;
    }
}

Después de ejecutar el código las pelotas quedan colocadas de la siguiente forma:
condicionales 01b

Aclaración
Los bucles se explican en otra entrada pero en clase hemos visto los suficientes ejemplos de bucle como para que entendáis estos sin dificultad. O eso espero! 😉

Más ramificación con ifelse if

Retomando el ejemplo anterior, podríamos querer que si la instancia se llama pelota03 se coloque como antes, si se llama pelota08 se coloque más abajao, y si no se coloque como todas las demás en fila:

// ...
    if (instancias[i].name == &quot;pelota03&quot;) 
    {
        instancias[i].x =  i*50 +30;
        instancias[i].y = 100;
    }
    else if (instancias[i].name == &quot;pelota08&quot;)
    {
        instancias[i].x = i*50 +30;
        instancias[i].y = 300;
    }
	else
	{
		instancias[i].x = i*50 +30;
        instancias[i].y = 200;
	}

Y entonces al publicar nos quedaría:
condicionales 01c

Operaciones Lógicas

Hasta ahora dentro del paréntesis del if solo hemos realizado comparaciones sencilla. También se pueden realizar, y muchas veces es necesario, operaciones lógicas más complejas que incluyen dos o más comparaciones.
Supongamos que queremos, en el ejemplo anterior, colocar las pelotas cuyo nombre acabe entre 3 y 6 (ambas incluidas), más arriba que las demás.

Inciso:
Extraer esta información del nombre de las instancias es más complicado que utilizar el índice del array, por eso en los siguientes ejemplos no vamos a utilizar el nombre de instancia. Sólo hay que tener presente que el primer índice del array es el 0 a la hora de escribir las condiciones.

Para conseguir nuestro objetivo tenemos que traducirlo a una sentencia con comparaciones y operaciones lógicas. Las operaciones lógicas que se utilizaremos en programación son tres:

  1. AND, que se ecribe && en expresiones del tipo comparacion1 && comparacion2, que solo se cumplirán si se cumplen las dos comparaciones
  2. OR, que se ecribe || en expresiones del tipo comparacion1 || comparacion2, que se cumplirán si se cumple cualquiiera de las dos comparaciones o las dos.
  3. NOT que se escribe ! en expresiones con una comparación como: !comparacion y que se cumplirá cuando la comparación no se cumpla (cuidado con el trabalenguas)

Teniendo en cuanta lo anterior y que pelota03 está en la posición 2 del array y pelota06 en la 5, nuestro código sería el siguiente:

var instancias:Array = [pelota01, pelota02, pelota03, 
					 pelota04, pelota05, pelota06, 
					 pelota07, pelota08, pelota09, pelota10];
					 
for (var i:int = 0; i &lt; instancias.length ; i++) 
{
    if (i &gt;= 2 &amp;&amp; i &lt;= 5) 
    {
        instancias[i].x =  i*50 +30;
        instancias[i].y = 100;
    }
	else
	{
		instancias[i].x = i*50 +30;
        instancias[i].y = 200;
	}
}

Y el resultado al publicar sería:
condicionales 01d

Si quisiéramos conseguir que, además la primera y las dos últimas se colocaran abajo haríamos lo siguiente con la operacion OR

//...
for (var i:int = 0; i &lt; instancias.length ; i++) 
{
    if (i &lt; 2 || i &gt; 6) 
    {
        instancias[i].x =  i*50 +30;
        instancias[i].y = 100;
    }
	else
	{
		instancias[i].x = i*50 +30;
        instancias[i].y = 200;
	}
}

Y así obtendríamos:
condicionales 01e

Si ahora quisiéramos colocar todas arriba menos pelota06 podríamos utilizar la operación NOT:

//...
for (var i:int = 0; i &lt; instancias.length ; i++) 
{
    if (!(i==5) ) 
    {
        instancias[i].x =  i*50 +30;
        instancias[i].y = 100;
    }
	else
	{
		instancias[i].x = i*50 +30;
        instancias[i].y = 200;
	}
}

Y entonces obtendríamos:
condicionales 01f

Inciso:
En este caso el ejemplo está forzado para utilizar la operación lógica NOT, porque lo más normal serí escribir lo siguiente:

for (var i:int = 0; i &lt; instancias.length ; i++) 
{
    if (i != 5) 
    {
        instancias[i].x =  i*50 +30;
        instancias[i].y = 100;
    }
	else
	{
		instancias[i].x = i*50 +30;
        instancias[i].y = 200;
	}
}

para obtener el mismo resultado. Aunque si os fijáis i != 5 es otra forma de utilizar la operación NOT, más abreviada, en todo caso.

Esto es todo por ahora. Sólo queda que asimileis bien y practiquéis estos conceptos, para lo cual os dejo los siguientes ejercicios:

Ejercicios de condicionales

  1. Tratar de entender los ejemplos de las pelotas repitiéndolos, utilizando los diferentes tipos de condicionales y operaciones lógicas
  2. Escribir un programa que calcule un número aleatorio del 1 al 10 y lo muestre en la consola de salida

    Recordad que para obtener un número aleatorio entre 0 y 1 se utiliza Math.random(). Si queremos que el número aleatorio esté en un rango myor, tendremos que multiplicar por el máximo valor del rango. Si además queremos que el resultado sea un número entero, tendremos que utilizar Math.ceil() que redondea al número entero más cercano por arriba

  3. Añadir al programa anterior una serie de condicionales que
    1. comprueben si el número es menor que 3 o no y lo muestre en consola
    2. comprueben si el número es mayor o igual que 7 y lo muestre en consola
    3. comprueben si el número está entre 3 y 7 y lo muestre en consola

    Al final deberíais tener tres programas, uno por cada una de las opcioes anteriores, que muestran en consola el número aleatorio calculado y si cumplen el condional o no.

  4. Crear un documento de flash con dos instancias en pantalla una que sea un círculo, con el punto de registro en el centro, que llame <pelota y otro con un rectángulo, con el punto de registro en la esquina superior izquierda, que se llame zona. Escribir una serie de condicionales que comprueben si pelota se encuentra dentro o fuera de la zona. COmprobar que los condicionales funcionan colocando la pelota en diferentes lugares de la escena, dentro y fuera de la zona.
  5. Crear otro documento con los mismos elementos que el anterior. Hacer que la zona ocupe la mayor parte de la escena, pero sin salirse de ella. Hacer que la pelota se mueva en cada fotograma con una velocidad aleatoria (asignando a las variables vx) y vy que creeis para controlar su velocidad valores aleatorios entre -5 y +5, por ejemplo). Evitad con condicionales que la pelota se salga de la zona

Volver al ͍ndice

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *