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());
}
}
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