martes, 7 de octubre de 2014



Buenas tardes, hoy traigo otra publicación extraída de mi paper de programación orientada a objetos, que pueden ver y descargar desde la sección de nuestros pdfs.


Algo sumamente interesante que encontré en python y que no había visto en php son los wrappers, los wrappers son una forma de trabajar muy particular, donde si hay una cierta cantidad de funciones que realizan una cierta tarea ya sea de validado de parámetros o lo que sea, se quita el código de cada una de las funciones y se lo mete en una función extra, luego se llama a esa función y se le pasa como parámetro la función particular que requiere de estas tareas.

Es bastante difícil de explicar pero trataré de hacerlo de otra forma, por ejemplo supongamos que tenemos varias funciones de nuestra clase que tienen un try y un catch, y el catch en todas ellas llama a una función llamada onError, creamos una función entonces que se llame ErrorControl:

// wrapper try, agradecimientos a Destructor.cs por la idea
private function ErrorControl($call, $args = null)
{
    try
    {
        call_user_func($call, $args);
    } catch (\Exception $error) {
        $this->onError($error->getMessage());
    }
}

Entonces ocurre que llamamos a la función errorControl pasándole como parámetro la función final a la que llamar, y los argumentos, luego ponemos el try y el catch y llamamos a la función que queríamos llamar originalmente, y la misma ya tendrá el try y catch, de esta forma nos ahorramos escribir try y catch en cada una de las funciónes que lo necesiten.

Aquí se aplica la idea (en la función refresh):

Pero tiene el inconveniente que solo funciona llamando a las funciones desde funciones internas.

No obstante estoy trabajando en la creación de un código estilo property (un trait) que permita la implementación de wrappers desde llamadas externas.


Un saludo lectores y espero les haya parecido interesante, la idea fué sugerida por Destructor.cs a quien le mando un saludo, es un gran programador y me gustaría que algún día hagamos una entrada en conjunto.

0 comentarios:

Publicar un comentario

Subscribete al RSS Follow me on Twitter!