- Callback (informática)
-
Callback (informática)
En programación de computadoras, un callback es una porción de código ejecutable que es pasado como un argumento a otro código. Esto permite construir código de bajo nivel como capas de abstracción que pueden ser llamadas desde una subrutina (o función) definida en una capa de mayor nivel.
Usualmente, el código de alto-nivel se inicia por el llamado de funciones definidas en el código a bajo-nivel, pasando a este un puntero o un puntero inteligente (conocido como programación genérica, en donde el comportamiento exacto de una función puede ser dinámicamente determinado por el paso punteros a funciones o handles a funciones de bajo nivel que aunque diferentes sean compatibles entre si. Esta es una técnica de mucha importancia para lo que se denomina código reutilizable.
Contenido
Motivación
Para entender los motivos para usar callbacks, hay que considerar el problema de realizar una operación arbitraria en cada opción de una lista. Una opción es iterar sobre la lista, operando sobre cada uno de los objetos. Esta es la solución más común en la practica, pero no es la ideal; el código para manejar los iteradores (por ejemplo, un bucle
for
) deberá ser duplicado en cada lugar del código donde es necesario. Más aún, si la lista es actualizada por un proceso asíncrono (por ejemplo, si un elemento es añadido o eliminado), el iterador podría saltar sobre los elementos o cambiar a corrupto durante el paso a través de estos.Una alternativa podría ser crear una nueva biblioteca de funciones que ejecute la tarea deseada con la sincronización apropiada en cada caso. Este propuesta aun requiere que cada nueva función de la biblioteca contenga el código para ir a través de la lista. Esta solución no es aceptable para bibliotecas genéricas tengan como objetivo varias aplicaciones; el desarrollador de la biblioteca no puede anticiparse a las necesidades de cada aplicación, y el desarrollador de las aplicaciones no debería necesitar conocer los detalles de la implementación de la biblioteca.
En esta caso los callbacks resuelven estos problemas. Un procedimiento es escribir el paso a través de lista, que provee a la aplicación del código para ir a través de la lista operando sobre cada ítem. Hay una distinción clara entre la biblioteca y la aplicación sin sacrificar la flexibilidad. Un callback puede también ser considerado como una forma de rutina enlazada por referencia.
Ejemplo
El siguiente código en C se muestra el uso de callbacks para el caso especifico de búsqueda de un ítem en un arreglo (en este caso, el primer entero es mayor que 5). Primero, el modelo de iteración:
int i; for (i = 0; i < celdas; i++) { if (arreglo[i] > 5) { break; } } if (i < celdas) { printf("Item %d\n", i); } else { printf("No encontrado\n"); }
Siguiente, vemos la implementación como un callback:
/* CÓDIGO DE LA BIBLIOTECA */ int atravesCon(int arreglo[], size_t celdas, int (*callback)(int indice, int item, void *parametro), void *parametro) { int codigoSalida = 0; for (int i = 0; i < celdas; i++) { codigoSalida = callback(i, arreglo[i], parametro); if (codigoSalida != 0) { break; } } return codigoSalida; } /* CÓDIGO DE LA APLICACIÓN */ int buscar (int indice, int item, void *parametro) { if (item > 5) { *(int *)parametro = indice; return 1; } else { return 0; } } /* (en la otra función) */ int indice; int encontrado; encontrado = atravesCon(arreglo, celdas, &buscar, &indice); if (encontrado) { printf("Item %d\n", indice); } else { printf("No encontrado\n"); }
Noten que atravesCon recibe un parámetro extra que el callback puede usar para sus propios propósitos. Normalmente un callback utiliza tales parámetros como punteros a datos de la aplicación por afuera de su ámbito, en este caso es la variable que recibe el índice. Esta característica es necesaria solo para un lenguaje en ámbito estático tales como C o C++ (en C++ y otros lenguajes OO otro tipo de soluciones son posibles.
Implementación
Casos especiales
Enlaces externos
- Style Case Study #2: Generic Callbacks
- C++ Callback Solution
- Basic Instincts: Implementing Callback Notifications Using Delegates
- Implement Script Callback Framework in ASP.NET
- Callback Balance C++ net framework
- Callback Procedures
- Implement callback routines in Java
Referencias
Categorías: Software | Programación
Wikimedia foundation. 2010.