Simplificar el código (en cualquier lenguaje de programación) ayuda no solo al rendimiento del programa, sino que también facilita la comprensión del mismo. (Claro que siempre debe ir acompañado de una buena documentación)
1) IF (estructura de control)
Varias Expresiones (ejemplo no simplificado)
if(isset($_GET['accion'])) {
if($_GET['accion'] == 'agregar') { //Acción... }
}
Ejemplo simplificado
if(isset($_GET['accion']) && $_GET['accion'] == 'agregar') { //Acción... }
Explicación: El primer caso hace una comparación primero de la existencia de la variable “accion” dentro del arreglo $_GET (por medio de la función isset), posteriormente se verifica si el valor de la acción $_GET['accion'] es igual a “agregar”, los resultados esperados son correctos, sin embargo, en el segundo ejemplo se muestra cómo la comparación se puede hacer en una sola línea (ahorrando así llaves para delimitar bloques de códigos y espacio), la expresión está compuesta por dos sentencias unidas por un and (&&), se empiezan a evaluar de izquierda a derecha y si alguna no se cumple, el IF termina su comprobación, sin entrar a ejecutar el código.
Es importante saber esto, ya que muchas veces, si no hacemos la previa comparación con isset, e intentamos obtener el valor, PHP genera un error como el siguiente: Notice: Undefined index: accion, y nos hace creer que debemos separar el análisis en 2 IF (uno para verificar la existencia de la variable “accion” dentro de $_GET y otro IF para verificar el contenido de la variable $_GET["accion"], como en el ejempo no simplificado)
Operador ? : (ejemplo no simplificado)
$tipoPersona = "";
if($edad >= 18) {
$tipoPersona = "adulto";
} else {
$tipoPersona = "menor";
}
Ejemplo simplificado
$tipoPersona = ($edad > 18)?"adulto":"menor";
Explicación: El operador ? : permite realizar sentencias IF en una sola linea, la sintaxis es la siguiente: resultado = (expresion_de_comparacion)?valor_si_verdadero:valor_si_falso, incluso se pueden realizar comparaciones anidadas en una sola linea, ejemplo:
$pasarExamen = ($estudie_mucho == true)?true:($soy_inteligente==true)?true:false;
2) Comparación de Arrays dentro de Ciclos For/While
Seguramente te has topado con un código como el siguiente:
$arreglo = array("color" => "rojo",
"puertas" => "2",
"precio" => "3500",
"transmision" => "estandar",
"garantia" => "2 años");
foreach($arreglo as $key => $value) {
if($key != "precio" && $key != "garantia") {
echo $key." = ".$value;
}
}
El código anterior imprime la llave y valor de cada elemento del $arreglo, siempre y cuando, la llave no sea igual a “precio” y “garantia”, entonces, si tuviéramos un arreglo de 1000 elementos, en cada ciclo del FOR se haría la comparación de la llave, una forma de optimizar esto es:
$arreglo_filtrado = array_diff_key($arreglo, array("precio" => "", "garantia" => ""));
foreach($arreglo_filtrado as $key => $value) {
echo $key." = ".$value;
}
Con esto, filtramos primero las llaves del arreglo que queremos excluir (más información sobre la función array_diff_key) y posteriormente recorremos cada elemento del $arreglo_filtrado, notemos que no debe realizarse ninguna comparación, puesto que con el filtrado inicial, nos deshicimos de los elementos que no queriamos mostrar en el ciclo FOR.
enero 16th, 2011 on 9:08 am
Qué interesante, me hizo recordar viejos tiempos cuando alguna vez navegué por el océano de la programación… ¡felicidades!!!
febrero 11th, 2011 on 1:54 pm
Hola camarada! excelente blog, interesante y muy pero muy útil.. seguiré esperando a que mi lector de feeds me avise de una nueva entrada!
febrero 18th, 2011 on 6:26 pm
Gracias Toño! espero actualizarlo con más frecuencia