Otras veces, con todas las funciones locas para agregar features de funcional, hay un gran nivel de indireccion y wrappeo de funciones, lo que lleva a un debug complicado.
Por otro lados siempre es bueno tener el manejo de errores en un solo punto, después de todo DRY se aplica a todo, y los varios manejos de errores no traen mas que dolores de cabeza.
En fin, siguiendo con la linea de pensamiento de orden superior podemos pensar en una funcion que se use en la definicion de las funciones que pueden tirar un error.
function e (fn, st) {
if (st == null) st = alert;
return function () {
try {fn.apply(null, arguments)}
catch (err) { st(err); }
}
}
Como bien se puede ver esta funcion devuelve la funcion metida adentro de un try catch definido y con una estrategia de manejo de error pasada por parametro y con alert como estrategia por defecto.
Ahora con agregar un objeto tercero que maneje errores tenemos una definición robusta. :)
Un ejemplo de uso puede ser
var funcionManejada = e( function () { throw "ejemplo"} );
funcionManejada();
Les prometo que si encuentro como bajar monadas felices a Jscript voy a hacer la versión monádica, que es todavía mas poderosa.
Ahora, como aplicamos esto a javascript orientado a objetos?
Se me ocurre velozmente una forma similar con el siguiente boceto
function ErrorMixin (object) {
for(k in object){
if(this.isMethod(object[k]) {
object[k] = e(object[k]);
}
}
}
function objetito () {
ErrorMixin(this);
}
Faltaria definir isMethod, que es una huevada pero no me acuerdo los strings :P Igual esta claro que este mixin es bastante pobre por que se aplica sobre todos los metodos del objeto. Se me ocurre tambien que podrían anotarse o podrían definirse con una expresion regular y alguna convencion adhoc.
Buep, enjoy your weekend my friend. Por mi lado me voy a escaviar y comer fondue a la farmacia
No hay comentarios:
Publicar un comentario