quino

Hoy vamos a introducirnos directamente en la base de cualquier programa, el control de flujo. Y una de sus principales estructuras la decisión.

Lo que nos proponemos elementalmente es que el programa tome decisiones de acuerdo a determinadas condiciones. En términos simples el programa debe razonar:

Si pasa esto. Hago esto.

Eso seria una decisión simple. La condición seria ‘si pasa esto’ y la acción a realizar en caso de que la condición se cumpla seria ‘Hago esto’. Esta sencilla estructura llevada a código seria lo siguiente:

if (condición) {

instrucción;

}

Por ejemplo:

$edad = 20;

if ($edad >= 18){

echo ("sos mayor de edad");

}

Analicemos este ejemplo. La intención de este script es decidir si la persona cuya edad tiene cargada la variable edad, es mayor de edad (en mi país 18 años, no se en el suyo). Así que para empezar declaramos la variable y la inicializamos en 20 (suponiendo que hablamos de años ¿no?):

$edad = 20;

Después empieza la parte de la decisión en si. Toda decisión simple empieza con if (que en español significa ‘si’), luego la condición por la que estamos preguntando que va entre paréntesis (en este caso preguntamos si la variable edad es mayor o igual a 18); y finalmente entre llaves lo que queremos hacer si le condición es verdadera.

Antes de seguir hagamos un stop en la condición en si:

Condición y sus operadores

Siempre antes de de escribir una condición debemos pensarla para que según el caso pueda devolvernos un Boolean, o sea verdadero o falso. En el ejemplo anterior preguntamos si 20 es mayor o igual que 18 y como lo es, la condición devolvió verdadero. O sea si la condición devuelve verdadero ejecutamos lo que corresponda.

Una condición puede ser simple (como la del ejemplo) o compuesta, uniendo varias condiciones simples. Un ejemplo de condición compuesta seria:

$edad = 20;

if ($edad >= 18 && $edad < 65){

echo ("sos mayor de edad y todabia no podes jubilarte");

}

Acá estamos preguntando, si edad es mayor o igual a 18 y edad es menor a 65 entonces imprimimos el mensaje. Entonces solo si se cumple la primer parte de la condición (edad es mayor o igual a 18) y la segunda parte de la condición (edad es menor a 65), toda la condición en su conjunto devuelve verdadero e imprimimos el mensaje.

Notemos que hasta ahora hemos estado usando determinados “símbolos” para construir y conectar nuestras condiciones. Estos símbolos se denominan operadores y existen unos cuantos (y si, se los van a tener que acordar todos):

Operadores de comparación:

Operador Descripción Ejemplo

<

Menor a

5 < 8 //esto es verdadero

7 < 2 //esto es falso

6 < $variable

/*esto será verdadero o falso según que valor tenga la variable variable */

>

Mayor a

7 > 3 //esto es verdadero

7 > 8 //esto es falso

6 > $variable

/*esto será verdadero o falso según que valor tenga la variable variable */

<=

Menor o Igual a

5 <= 5 //esto es verdadero

7 <= 8 //esto es verdadero

7 <= 5 //esto es falso

6 > $variable

/*esto será verdadero o falso según que valor tenga la variable variable */

>=

Mayor o Igual a

7 >= 3 //esto es verdadero

8 >= 8 //esto es verdadero

7 >= 8 //esto es falso

6 > $variable

/*esto será verdadero o falso según que valor tenga la variable variable */

==

Igual a

6 == 6 //esto obviamente es verdadero

$variable == 4 /*esto depende de la variable variable*/

$variable == “azul” //también se pueden comparar Strings

!=

Distinto a

7 != 5 //esto es verdadero

$variable != “casa” //esto depende de la variable variable

Operadores Lógicos

Operador Descripción Ejemplo

&&

And condicional. Se utiliza para unir dos condiciones entra si.

$edad >= 18 && $edad < 65

/*Esto devuelve verdadero si edad es mayor o igual a 18 Y edad es menor a 65*/

||

OR condicional.

Se utiliza para unir dos condiciones entra si.

$nombre == “María” || $nombre == “Vanesa”

//*Esto devuelve verdadero si la variable ‘nombre’ es igual a ‘María’ O es igual a ‘Vanesa’

^

XOR a nivel de bits.

$color == verde ^ $precio > 900

/*Devuelve verdadero si, O color es verde O precio es mayor a 900 pero no las dos a la vez*/

!

Invierte el valor de un Boolean. O sea sirve para negar.

if (!$edad < 18){

echo (“Sos mayor de edad”);

}

//aca estamos preguntando si edad no es menor a 18 (o sea si edad es mayor o igual a 18).

Utilizando estos operadores podemos lograr condiciones de la complejidad que necesitemos. Por ejemplo:

if (($edad >= 18 && $edad <= 40) || $promedioDeGoles > 2){

echo ("puede jugar en la selección mayor");

}

Nótese que vamos agrupando diferentes condiciones complejas con paréntesis.

En el caso de que queramos colocar como condición el valor de un boolean, alcanza con solo colocar el nombre de la variable:

if ($archivoExiste){

//abrimos archivo

}

El sino y las decisiones múltiples

Hasta ahora estuvimos viendo decisiones simples con la estructura:

Si pasa esto, hago esto

Pero también es importante que veamos este otro tipo de decisión simple:

Si pasa esto, hago esto.

Sino, hago esto otro.

Esto llevado a código seria lo siguiente:

if (condición) {

instrucción;

}else{

otra instrucción;

}

Por ejemplo

if (edad >= 18) {

echo ("Sos mayor de edad, podes entrar");

}else{

echo ("Sos menor de edad, tenes que entrar acompañado por un mayor");

}

Ahora que también podría interesarnos la decisión con la estructura:

Si pasa esto, hago esto.

Si pasa esto otro, hago esto otro

Que llevada a código seria:

if (condición) {

instrucción;

}elseif (otra condición){

otra instrucción;

}

Mientras que el bloque if y el bloque else solo pueden usarse una vez por decisión, podemos usar tantos ‘elseif’ como necesitemos:

if (condición1){

instrucción1;

}elseif (condición2){

instrucción2;

}elseif (condición3){

instrucción3;

}

Y también podemos terminar nuestras decisiones usando la opción por defecto (o sea else):

if (condición1) {

instrucción a ejecutar si se cumple la condición1;

}elseif (condición2){

instrucción a ejecutar si se cumple la condición2;

}else{

instrucción a ejecutar si no se cumple ninguna de las dos anteriores;

}

Vale aclarar que si bien yo estoy ejemplificando con una instrucción por bloque, ustedes pueden usar todas las que necesiten; ya que cuando se cumpla la condición, se ejecutara todo lo que tiene entre sus llaves ‘{‘ y ‘}’

if (condición){

instrucción1;

instrucción2;

...

instrucciónN;

}

En PHP (y en otros lenguajes) existe otra estructura para tomar decisiones llamada decisión múltiple o switch. Esta se utiliza cuando vamos a preguntar por distintos valores que pueda tomar una misma variable o función y así evitarnos utilizar muchos elseif (cosa que queda feo y es mal visto por los programadores). Su estructura es la siguiente:

switch ($variable) {

case valor:

instrucción;

break;

case otro valor:

instrucción;

break;

default:

instrucción por defecto;

}

Un ejemplo de decisión multiple seria:

$puesto = "defensor";

switch ($puesto) {

case "arquero":

echo ("Va al arco");

break;

case "defensor":

echo ("Evita que pasen los delanteros rivales");

break;

case "mediocampista":

echo ("La columna vertebral del equipo");

break;

case "delantero":

echo ("El ataque del equipo");

break;

default:

echo ("puesto no reconocido, va al banco");

}

La acción por default (al igual que el else) no es obligatoria. Tampoco requiere la instrucción break.

Decisiones anidadas

Es probable que a la hora de programar nuestra aplicación nos encontremos ante la siguiente situación:

si pasa esto,

luego;

si pasa esto otro,

hago esto,

sino hago esto otro.

Para resolverlas podemos anidar una decisión dentro de la otra, y si queremos también combinar decisiones simples y múltiples. Por ejemplo:

$edad = 18;

$sexo = "femenino";

if ($edad >= 18) {

if ($sexo == "femenino") {

echo ("Las damas entran gratis");

}else{

echo ("los caballeros deben abonar entrada normal");

}

}else{

echo ("los menores no pueden ingresar");

}

Noten que es muy importante respetar las llaves para que nuestra decisión se ejecute correctamente. Podemos tener tantos niveles de decisión como necesitemos. Asimismo podemos combinar los dos tipos de decisión:

$disponible = true;

$marca = "Fort";

if ($disponible) {

switch ($marca) {

case "Fort":

echo ("El cliente eligió un Fort");

break;

case "Chevrolet":

echo ("El cliente eligió un Chevrolet");

break;

}

}else{

echo ("el modelo no esta disponible");

}

IMPORTANTE: no olviden cerrar todas las llaves que abran.

Bueno hasta aquí todo por hoy, la próxima ciclos.

Salu2, study.