Callback (informática)

Callback (informática)

Callback (informática)

Un callback esta a menudo al mismo nivel del llamado original.
En otro escenario común, el callback es primero registrado y más tarde llamado asincrónicamente.

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

Referencias

Obtenido de "Callback (inform%C3%A1tica)"

Wikimedia foundation. 2010.

Игры ⚽ Нужна курсовая?

Mira otros diccionarios:

  • Callback — Para otros usos de este término, véase Callback (informática). En telefonía, un retrollamado (en inglés: callback) es un proceso por el cual una persona que origina una llamada telefónica, es inmediatamente colgado y vuelto a llamar (tras unos… …   Wikipedia Español

  • IP Pascal — is an implementation of the Pascal programming language using the IP portability platform, a multiple machine, operating system and language implementation system. Overview IP Pascal implements the language Pascaline (named after Blaise Pascal s… …   Wikipedia

  • Hibernate — Este artículo o sección sobre informática necesita ser wikificado con un formato acorde a las convenciones de estilo. Por favor, edítalo para que las cumpla. Mientras tanto, no elimines este aviso puesto el 29 de marzo de 2010. También puedes… …   Wikipedia Español

  • Link Control Protocol — En este artículo se detectaron los siguientes problemas: Necesita ser wikificado conforme a las convenciones de estilo de Wikipedia. Carece de fuentes o referencias que aparezcan en una fuente acreditada. Por favor …   Wikipedia Español

  • Modelo Vista Controlador — Un diagrama sencillo que muestra la relación entre el modelo, la vista y el controlador. Nota: las líneas sólidas indican una asociación directa, y las punteadas una indirecta (por ejemplo, patrón Observer). Modelo Vista Controlador (MVC) es un… …   Wikipedia Español

  • Xajax — ? Información general Última versión estable 0.6 beta 1 26 de enero de 2009 Género ? …   Wikipedia Español

  • stdlib.h — (std lib: standard library o biblioteca estándar) es el archivo de cabecera de la biblioteca estándar de propósito general del lenguaje de programación C. Contiene los prototipos de funciones de C para gestión de memoria dinámica, control de… …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”