El cakephp es un framework que entre las cosas que nos brinda es una consola en la cual podemos construir: modelos, controladores, vistas, pruebas, ademas de contar con una serie de utilitarias.

 

¿Cual era el problema? si es que existía alguno

Por otra parte cakephp se caracteriza por ser un framework con una codificación muy clara, sin embargo de repente en el core hay código que es difícil de entender. Muchas veces como programadores hacemos una serie de proposiciones lógicamente correctas sin embargo las hacemos tan complejas que al momento de que terceras personas tratan de leerlas son algo difíciles de descifrarlas(por así decirlo) y esto con el tiempo llega a ser un problema ya que el único que entiende cierto código es quien lo escribió. Por tales razones siempre es bueno tratar de simplificar las expresiones lógicas de tal forma de hacerlas lo mas claras posibles.

Pero.. ¿por que comento todo esto? verán en concreto el  cakephp en su tiempo tuvo la siguente linea:

while ($in === '' || ($in !== '' && (!in_array(strtolower($in), $options) && !in_array(strtoupper($in), $options)) && !in_array($in, $options))) {

Tomate tu tiempo para analizarla y piensa que es lo que hace dicha linea, ¿es algo confusa verdad?.

Analizando posibles soluciones ¿como hacemos esto mas claro?

Bien veamos el código de otra forma, analizando la instrucción lógica siguiente:

(bool)($in === '' || 
        (
             $in !== '' 
           && (!in_array(strtolower($in), $options)
           && !in_array(strtoupper($in), $options)) 
           && !in_array($in, $options))
       );

Bien ahora analice la siguiente expresión lógica:

(bool)($in === '' || ($in !== '' && (otra_expr_logica) ));

Verán sí en la primera parte analizamos que $in es la cadena vacía ($in === '') entonces la segunda($in !== '' && (otra_expr_logica) ) parte ya no es analizada por PHP (por su comportamiento en corto circuito o perezoso).

Solución final

Bien teniendo esto en cuenta y aplicando algunas reglas lógicas podemos obtener una expresión un poco mas clara. Finalmente  la solución que se implemento es la que se muestra a continuación:

(bool) ($in === '' || 
            !(
                 in_array(strtolower($in), $options)
              || in_array(strtoupper($in), $options) 
              || in_array($in, $options)
        ));

Queda como tarea para el lector hacer su propio análisis lógico, para mayor información de la contribución consultar:

https://github.com/cakephp/cakephp/pull/411

Fitorec

Me gusta la programación, me fascina el software libre, mis lenguajes preferidos son PHP, JavaScript, Python y Bash (aunque me gusta programar en casi cualquier lenguaje), en sistemas operativos me gusta GNU/Linux.

Más Entradas - Website

Sígueme:
TwitterGoogle PlusYouTubeDelicious

Sin Comentarios

Puedes ser el primero en comentar.

Deja un comentario

Por favor, introduzca su nombre. Please enter an valid email address. Por favor, introduzca un mensaje.