Anuncios

Bievenidos sean a este post, hoy hablaremos sobre una evolucion del if.

Anuncios
Anuncios

En el post anterior hablamos sobre el condicional if que nos permitia crear codigos pensantes porque podian decidir la conducta de nuestro codigo en base a ciertas condiciones establecidas por nosotros pero con el tiempo se creo otro tipo de condicional donde en lugar de trabajar con condiciones trabaja sobre una variable y en base a los valores almacenados en esta procede a ejecutar un bloque de instrucciones, este tambien es un condicional muy difundido entre todos los lenguajes pero algunos pueden nombrarlo de otra forma, por ejemplo Visual Basic lo llama select case, pero su sintaxis es igual en todos los casos, pasemos a ver su sintaxis:

switch(variable)
{
    case n1:
        ... instrucciones ...
        break;
    case n2:
        ... instrucciones ...
        break;
...
    case nN:
        ... instrucciones ...
        break;
    default:
        ... instrucciones ...
        break;
}
Anuncios
Anuncios

Siempre comienza con el switch y la variable a verificar, dentro de su bloque estableceremos la palabra case seguido de un valor que pueda contener la variable informada al comienzo, en el case usamos los dos puntos para indicar que comienza su bloque interno, dentro de este podemos usar cualquier instruccion para procesar si el valor de case coincide con el informado en la variable y al final de todas las instrucciones usaremos un break para salir no solo del case sino del switch tambien, estos case podemos usar todos los que queramos y todos con la misma estructura pero en cada case usaremos distintos valores que pueda tomar la variable, estos case pueden ser todos los que creamos necesarios con todos los valores que necesitemos trabajar, una vez terminado los case necesarios utilizaremos a default que sera el encargado de ejecutar instrucciones en el caso de que no hayamos coinicido con ninguno de los case anteriores, haciendo comparaciones equivale al else de if y es opcional al igual que este, con esto tenemos la teoria de como trabaja pero vamos a crear un ejemplo practico para verlo en accion, para ello crearemos un archivo llamado dados.php y le agregaremos un codigo simple:

dados.php

<?php

$numero = rand(1, 6);
$texto = "Ha salido el numero ";

if ($numero == 1) echo $texto . $numero . "\n";
if ($numero == 2) echo $texto . $numero . "\n";
if ($numero == 3) echo $texto . $numero . "\n";
if ($numero == 4) echo $texto . $numero . "\n";
if ($numero == 5) echo $texto . $numero . "\n";
if ($numero == 6) echo $texto . $numero . "\n";

?>
Anuncios
Anuncios

Este es un ejemplo poco practico pero que nos servira para entender el concepto, primero generamos un numero al azar por medio de rand y lo delimitamos entre 1 y 6, esto lo almacenacemos en numero, luego creamos una variable llamada texto con un mensaje, despues tenemos una serie de condicionales donde verificamos si numero es igual a un valor y en caso de ser verdadero procede a mostrar el mensaje de texto concatenado con numero seguido de un modificador de nueva linea, los condicionales son innecesarios porque podriamos usar el echo directamente pero para ejemplificar mejor lo siguiente lo dejaremos de esta forma, con esto comentado compilemos y ejecutemos para ver su salida:

tinchicus@dbn001vrt:~/lenguajes/PHP$ php dados.php 
Ha salido el numero 3
tinchicus@dbn001vrt:~/lenguajes/PHP$
Anuncios

Ahora vamos a tomar este codigo y lo modificaremos de la siguiente manera:

dados.php

<?php

$numero = rand(1, 6);
$texto = "Ha salido el numero ";

switch($numero)
{
	case 1:
		echo $texto . $numero . "\n";
		break;
	case 2:
		echo $texto . $numero . "\n";
		break;
	case 3:
		echo $texto . $numero . "\n";
		break;
	case 4:
		echo $texto . $numero . "\n";
		break;
	case 5:
		echo $texto . $numero . "\n";
		break;
	default:
		echo $texto . $numero . "\n";
		break;
}

?>
Anuncios
Anuncios

En este caso simplemente reemplazamos el bloque de condicionales por un switch con los valores del 1 al 5, donde cada uno tiene su instruccion de mostrar el texto y el numero concatenados, y para esta ocasion si el valor es 6 sera captado por default porque sabemos que no habra ningun otro valor mas, una de las ventajas de trabajar de esta forma, en el caso de switch, cuando se cumple el case se termina el proceso y se sale del switch, en el caso de los condicionales no porque si el numero es 1 igualmente lo chequeara contra el 2, contra el 3 y asi, esto hace que se desperdicien ciclos de CPU y ocasionando, obviamente no en este codigo, problemas de performance a largo plazo, si bien el codigo anterior no era complicado si tuvieramos mas instrucciones tambien entran en juegos errores de logica que pueden derivar en otros problemas, en cambio switch nos permite tener mas organizadas las instrucciones para cada caso, la gran contra de switch es que no maneja condiciones y solamente se compara con valores, es decir que si necesitamos un valor que esta dentro de un rango es mas adecuado y practico usar un if en lugar de un switch pero si podemos hacer lo siguiente con el codigo anterior:

<?php

$numero = rand(1, 6);
$texto = "Ha salido el numero ";

switch($numero)
{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
	default:
		echo $texto . $numero . "\n";
		break;
}

?>
Anuncios

Como todas las instrucciones son las mismas podemos dejar los case en blanco y como no tenemos break pasaran a la siguiente hasta llegar al default y ejecutar la accion porque son todas iguales, esta es una opcion interesante porque en algunas circunstancias podemos procesar un dato con un case y si el resultado cumple con otro case omitimos el break para que siga y sea procesado por el otro pero se debe adecuar a las necesidades de tu codigo, si lo compilan y vuelven a ejecutar deben obtener el mismo resultado que antes.

Anuncios
Nota:
Este condicional no reemplaza a if dado que podemos utilizarlo dentro de un case en caso de ser necesaria otra evaluacion
Anuncios

En resumen, hoy hemos visto a switch, como trabaja, como nos puede ayudar para ciertas circunstancias, tambien hemos discutido cuales son las ventajas y desventajas de trabajar con un condicional o el otro, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50