El siguiente paso en la programación es dotar de más dinamismo a nuestros programas gracias a un conjunto de estructuras, llamadas estructuras de contro, que nos permitirán realizar diferentes acciones en función de las necesidades. Además nos permitirá nos dara la posibilidad de realizar una misma accion multitud de veces con tan solo una línea de codigo, lo que simplificará mucho el programa.
En esta unidad introduciremos las estructuras de control y nos centraremos en las sentencias condicionales.
2.- Estructuras de control
El flujo secuencial de un programa hace que, en ocasiones, necesitemos: saltarnos pasos, tomar decisiones, realizar acciones repetitivas, etc, dependiendo de unas determinadas condiciones. Las estructuras de control nos permiten controlar todo ello de forma que podremos cambiar el día de la semana, pedir una contraseña varias veces o dar más o menos privilegios en función del usuario que entre al programa.
Dentro de las estructuras de control encontramos dos tipos de sentencias:
Sentencias condicionales o selectivas: son aquellas en las que, dependiendo de una condición, se ejecuta una parte de código u otra. Es decir, son bifurcaciones donde el cumplimiento de una determinada condición llevará a diferentes ejecuciones.
Sentencias repetitivas o iterativas: son aquellas en las que el código se ejecuta un número determinado de veces, es decir, es un bucle donde se evalúa una condición que, al no cumplirse, hará que se acaben las repeticiones.
Como podemos ver en la imagen, la primera de las imágenes se correspondería a un programa en el que no se introdujera ninguna estructura de control. La segunda de las imágenes se relaciona con las sentencias condicionales o selectivas, y la tercera con las sentencias repetitivas.
3.- Estructuras condicionales
Estas estructuras se utilizan para la toma de decisiones (por ello también se llaman estructuras selectivas) y lo que hacen es evaluar una determinada condición para, a continuación y en función del resultado, llevar a cabo una porción de código u otra.
Entre las estructuras condicionales encontramos: el if, el if...else y el switch.
3.1.- Sentencia if
El constructor if es una de las características más importantes de muchos lenguajes, incluido PHP. Permite la ejecución condicional de fragmentos de código de modo que si se cumple una condición (es decir, el valor de la expresión es verdadero) entonces se realiza el código que agrupa. Su estructura es similar a la utilizar por el lenguaje C:
if (expresión)
sentencia
Vamos a mostrar un ejemplo:
Y su resultado:
Como podemos observar, en los dos if se ha cumplido la condición por lo que se mostrará el código del interior del if.
En ocasiones interesa que se ejecute más de una sentencia dentro del if. Ello implica la utilización de llaves que le indicarán a la estructura dónde comienzan y donde acaban las instrucciones que ha de ejecutar, tal y como muestra la siguiente sintaxis:
if (expresión) {
sentencia1;
sentencia2;
...
sentencian;
}
Otro ejemplo:
Y su resultado:
Como se puede observar, como la variable b es igual a 3, el segundo if no entrará a imprimir las dos líneas.
También podemos utilizar condiciones más complejas gracias a las expresiones que vimos en la unidad anterior:
Y su resultado:
En el ejemplo hemos utilizado dos expresiones compuestas, lo que nos permite aumentar las posibilidades y realizar diferentes comparaciones.
Ejercicio
En la teoría hemos visto dos programas en los que se implementan ejemplos de utilización de la sentencia if. Créalos y almacenalos con los nombres condicionales01.php, condicionales02.php y condicionales03.php. Además crea un nuevo programa (almacénalo como condicionales04.php) en el que:
Se declaren dos variables num1 y num2, con valores 4 y 8, respectivamente
Con la ayuda del if comprueba si ambos son menores o iguales que 10 y distintos de 3
Si se cumplen ambas condiciones deberá indicarlo por pantalla
Contenidos
3.2.- Sentencia if..else
Con frecuencia se desea ejecutar una sentencia si una determinada condición se cumple y una sentencia diferente si la condición no se cumple. Esto es para lo que sirve else. Éste extiende una sentencia if para ejecutar instrucciones en caso que la expresión se evalúe como falsa. Su sintaxis es la siguiente:
if (expresión){
sentencias
}else{
sentencias
}
De este modo, cuando el valor de la expresión sea falso, al contrario que la sentencia if en la que no se ejecutaba código alguno, se ejecutarán las sentencias agrupadas en el else. Mostramos un ejemplo en el que se muestra si un número es mayor que otro o viceversa:
Y el resultado:
3.3.- Sentencia if..elseif/if..else if
Hay otra sentencia que se usa a menudo para unir más de un condicional if, es la sentencia elseif o else if, la cual nos permite dar otra condición en caso de no cumplirse la primera y es una combinación de if y else. Del mismo modo que else extiende una sentencia if para ejecutar una sentencia diferente en caso que la expresión se evalúe como falsa, el elseif añade al else una condición más que se cumplirá en caso de ser verdadera.
La sintaxis es la siguiente:
if (expresión){
sentencias
}elseif{
sentencias
}else{
sentencias
}
En el siguiente programa se muestra un ejemplo de utilización de este tipo de sentencia utilizada para comprobar si dos números son iguales, mayor uno que otro o menor:
El resultado:
Puede haber varios elseif dentro de la misma sentencia if de modo que la primera expresión elseif (si hay alguna) que se evalúe como verdadera sería ejecutada. Veamos otro ejemplo en el que comparamos a con b, con c y con d para ver si a es el mayor:
Como resultado obtendremos:
La sentencia elseif, por tanto, es ejecutada solamente si la expresión if precedente y cualquiera de las expresiones elseif precedentes son evaluadas como falsas, y la expresión elseif actual se evalúa como verdadera.
Ejercicio
Implementa los ejemplos vistos en la teoría y almacénalos con los nombres condicionales05.php, condicionales06.php y condicionales07.php.
Ejercicio
Tomando como base el programa condicionales07.php y almacenándolo como condicionales08.php, modifícalo siguiendo las instrucciones:
Modifica el título para que indique "Trabajando con un ejemplo de números aleatorios"
Modifica la definición de la variable a para que la línea quede como se indica $a = rand(1,5);
Inserta un comentario encima de la definición anterior en la que expliques para qué sirve la función rand (búscalo en Internet)
Ejecuta el programa varias veces e inserta un comentario, al final del programa, en el que indiques qué ocurre y a qué es debido
Contenidos
3.4.- Sentencia switch
La sentencia switch es similar a una serie de sentencias if en la misma expresión. En muchas ocasiones, es posible que se quiera comparar la misma variable (o expresión) con muchos valores diferentes, y ejecutar una parte de código distinta dependiendo de a que valor es igual. Para esto es exactamente la expresión switch.
La sintaxis del switch es la siguiente:
switch(expresión o variable){
case valor1:
sentencia
break
case valor2:
sentencia
break
...
case valorn:
sentencia
break
}
Es importante entender cómo la sentencia switch es ejecutada con el fin de evitar errores, ya que es ejecutada línea por línea (en realidad, sentencia por sentencia) pero sólo en aquel case cuyo valor coincida con el de la expresión/variable del switch. PHP continúa ejecutando las sentencias hasta el final del bloque switch, o hasta la primera vez que vea una sentencia break. Si no se escribe una sentencia break al final de la lista de sentencias de un caso, PHP seguirá ejecutando todas las demás sentencias.
Un ejemplo ilustrativo:
Y el resultado:
Como a es igual a 3, el switch ejecutará el código correspondiente al case 3. Pero ¿qué ocurriría si no ponemos los break en cada case?
Pues que se ejecutaría el código del case 3, pero también el del case 4:
Ello es debido a que la instrucción break termina la ejecución de la estructura actual y se sale de ella, por lo que es necesario incluirla en todas y cada una de las sentencias case.
La sentencia switch también permite el uso de strings en la condición a evaluar, así como el uso de case vacíos. Mostramos un ejemplo en el que ambos se utilizan:
El resultado será el siguiente:
Como podemos observar, ahora la variable a es de tipo string y se compara con diferentes strings, inclusive uno en el que se indica que no tiene nombre, por lo que no se imprime nada.
Un caso especial de valor para case es el default (valor por defecto), el cual se utiliza al final, después del último case, y se aplica en caso de que no se haya ejecutado ninguno de los case anteriores. Por ejemplo:
Y como resultado obtendremos:
Otro caso particular es aquel en el que tenemos varios valores con un mismo resultado. En este caso, y utilizando el hecho de que si no ponemos break salta al siguiente case, pondremos varios case seguidos con los valores posibles, aunque sólo en el último el código que queremos ejecutar. Veamos un ejemplo:
Y su resultado:
Ejercicio
Implementa los ejemplos vistos en la teoría y almacénalos con los nombres condicionales08.php, condicionales09.php, condicionales10.php, condicionales11.php y condicionales12.php. Además implementa un programa (llamado condicionales13.php) en el que:
Declares dos variables a y b con valores 10 y Manzana
Con la primera implementa un switch para saber si está entre 0 y 10. En caso afirmativo deberá mostrarlo por pantalla.
Con la primera implementa un switch para saber si es Pera o Manzana o Sandía. En caso afirmativo deberá mostrarlo por pantalla.
Una vez hecho comprímelo todo en un fichero llamado condicionales.zip y súbelo a la plataforma.
No se permite un uso comercial de la obra original ni de las posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.
Los reconocimientos se realizan en el apartado Fuentes de información.
Todas las capturas de pantalla tienen copyright y pertenecen a TuInsitutoOnline.com.
TuInstitutoOnline.com permite su uso siempre y cuando se muestren desde el dominio www.tuinstituoonline.com y NO PERMITE enlazar a ellas desde otros lugares.
Además, la estructura diseñada para mostrar el contenido de las unidades es propiedad de TuInstitutoOnline.com.