fbpx
Wikipedia

Callback (informática)

En programación de computadoras, una devolución de llamada o retrollamada (en inglés: callback) es una función "A" que se usa como argumento de otra función "B". Cuando se llama a "B", ésta ejecuta "A". Para conseguirlo, usualmente lo que se pasa a "B" es el puntero a "A".

Un callback esta a menudo al mismo nivel del llamado original.

Esto permite desarrollar capas de abstracción de código genérico a bajo nivel que pueden ser llamadas desde una subrutina (o función) definida en una capa de mayor nivel. Usualmente, el código de alto-nivel inicia con el llamado de alguna función, definida a bajo-nivel, pasando a esta un puntero, o un puntero inteligente (conocido como handle), de alguna función. Mientras la función de bajo-nivel se ejecuta, esta puede ejecutar la función pasada como puntero para realizar alguna tarea. En otro escenario, las funciones de bajo nivel registran las funciones pasadas como un handle y luego pueden ser usadas de modo asincrónico.

Una retrollamada puede ser usada como una aproximación simple al polimorfismo y a la programación genérica, donde el comportamiento de una función puede ser dinámicamente determinado por el paso punteros a funciones o handles a funciones de bajo nivel que aunque realicen tareas diferentes los argumentos sean compatibles entre sí. Esta es una técnica de mucha importancia por lo que se la llama código reutilizable.

Uso

 
En otro escenario común, el callback es primero registrado y más tarde llamado asincrónicamente.

Estas funciones de retrollamadas tienen una gran variedad de usos. Por ejemplo, podría ser una función que lee un archivo de configuración y que asocia valores con opciones. Si las opciones están identificadas con un hash, entonces se escribe la función tal que haga una retrollamada que lo hace más flexibe: su usuario puede elegir que algoritmo de hashing desea y la función continuará trabajando, ya que usa la retrollamada para cambiar los nombres de las opciones en los hashes; así, las retrollamadas permiten al usuario de una función personalizarla en tiempo de ejecución.

Se puede considerar como ejemplo el problema de realizar varias operaciones arbitrarias en una lista. Una opción puede ser iterar sobre la lista, o también realizar alguna operación sobre cada uno de los elementos de la lista. En la práctica, la solución más común, pero no ideal, es utilizar iteradores como un bucle for) que deberá duplicarse en cada lugar del código donde sea 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 corromperse durante el paso a través de la lista.

Una alternativa podría ser crear una nueva biblioteca de funciones que ejecute la tarea deseada con la sincronización apropiada en cada caso. Esta propuesta aún 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 que 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 este caso las retrollamadas resuelven estos problemas. Un procedimiento es escribir el paso a través de una lista que provee a la aplicación del código para ir a través de la lista y operando sobre cada elemento. Existe una clara distinción entre la biblioteca y la aplicación sin sacrificar la flexibilidad. Una retrollamada puede también considerarse un tipo de rutina enlazada por referencia.

Otro uso es en la señalización de errores. Un programa en un sistema operativo Unix, por ejemplo, podría no querer terminar inmediatamente cuando recibe un SIGTERM; para tomar los recaudos necesarios, una función de retrollamada podría efectuar una limpieza.

También puede utilizarse para controlar si una función actúa o no: Xlib permite predicados personalizables a especificarse para determinar si un programa desea manipular un evento.

El siguiente código en C demuestra el uso de funciones de retrollamada para mostrar dos números:

#include <stdio.h> #include <stdlib.h> /* La función de llamada toma una simple retrollamada como un parámetro. */ void ImprimirDosNumeros(int (*numeroEntrada)(void)) { printf("%d y %d\n", numeroEntrada(), numeroEntrada()); } /* Una posible retrollamada. */ int unaRetrollamada(void) { return (rand() % 1000) + 9001; } /* Otra posible retrollamada. */ int otraRetrollamada(void) { return 42; } /* El programa principal llama a ImprimrDosNumeros() con tres retrollamadas diferentes. */ int main(void) { ImprimirDosNumeros(&rand); ImprimirDosNumeros(&unaRetrollamada); ImprimirDosNumeros(&otraRetrollamada); return 0; } 

Este ejemplo daría una salida en consola similar a:

 125185 y 89188225 9084 y 9441 42 y 42 

Referencias

Enlaces externos

  • Style Case Study #2: Generic Callbacks
  • C++ Callback Solution
  • Callback Balance C++ net framework
  •   Datos: Q1205349

callback, informática, texto, sigue, traducción, defectuosa, quieres, colaborar, wikipedia, busca, artículo, original, mejora, esta, traducción, copia, pega, siguiente, código, página, discusión, autor, este, artículo, subst, aviso, traducido, este, artículo, . El texto que sigue es una traduccion defectuosa Si quieres colaborar con Wikipedia busca el articulo original y mejora esta traduccion Copia y pega el siguiente codigo en la pagina de discusion del autor de este articulo subst Aviso mal traducido Callback informatica Este articulo o seccion necesita referencias que aparezcan en una publicacion acreditada Este aviso fue puesto el 11 de junio de 2012 En programacion de computadoras una devolucion de llamada o retrollamada en ingles callback es una funcion A que se usa como argumento de otra funcion B Cuando se llama a B esta ejecuta A Para conseguirlo usualmente lo que se pasa a B es el puntero a A Un callback esta a menudo al mismo nivel del llamado original Esto permite desarrollar capas de abstraccion de codigo generico a bajo nivel que pueden ser llamadas desde una subrutina o funcion definida en una capa de mayor nivel Usualmente el codigo de alto nivel inicia con el llamado de alguna funcion definida a bajo nivel pasando a esta un puntero o un puntero inteligente conocido como handle de alguna funcion Mientras la funcion de bajo nivel se ejecuta esta puede ejecutar la funcion pasada como puntero para realizar alguna tarea En otro escenario las funciones de bajo nivel registran las funciones pasadas como un handle y luego pueden ser usadas de modo asincronico Una retrollamada puede ser usada como una aproximacion simple al polimorfismo y a la programacion generica donde el comportamiento de una funcion puede ser dinamicamente determinado por el paso punteros a funciones o handles a funciones de bajo nivel que aunque realicen tareas diferentes los argumentos sean compatibles entre si Esta es una tecnica de mucha importancia por lo que se la llama codigo reutilizable Uso Editar En otro escenario comun el callback es primero registrado y mas tarde llamado asincronicamente Estas funciones de retrollamadas tienen una gran variedad de usos Por ejemplo podria ser una funcion que lee un archivo de configuracion y que asocia valores con opciones Si las opciones estan identificadas con un hash entonces se escribe la funcion tal que haga una retrollamada que lo hace mas flexibe su usuario puede elegir que algoritmo de hashing desea y la funcion continuara trabajando ya que usa la retrollamada para cambiar los nombres de las opciones en los hashes asi las retrollamadas permiten al usuario de una funcion personalizarla en tiempo de ejecucion Se puede considerar como ejemplo el problema de realizar varias operaciones arbitrarias en una lista Una opcion puede ser iterar sobre la lista o tambien realizar alguna operacion sobre cada uno de los elementos de la lista En la practica la solucion mas comun pero no ideal es utilizar iteradores como un bucle for que debera duplicarse en cada lugar del codigo donde sea necesario Mas aun si la lista es actualizada por un proceso asincrono por ejemplo si un elemento es anadido o eliminado el iterador podria corromperse durante el paso a traves de la lista Una alternativa podria ser crear una nueva biblioteca de funciones que ejecute la tarea deseada con la sincronizacion apropiada en cada caso Esta propuesta aun requiere que cada nueva funcion de la biblioteca contenga el codigo para ir a traves de la lista Esta solucion no es aceptable para bibliotecas genericas que tengan como objetivo varias aplicaciones el desarrollador de la biblioteca no puede anticiparse a las necesidades de cada aplicacion y el desarrollador de las aplicaciones no deberia necesitar conocer los detalles de la implementacion de la biblioteca En este caso las retrollamadas resuelven estos problemas Un procedimiento es escribir el paso a traves de una lista que provee a la aplicacion del codigo para ir a traves de la lista y operando sobre cada elemento Existe una clara distincion entre la biblioteca y la aplicacion sin sacrificar la flexibilidad Una retrollamada puede tambien considerarse un tipo de rutina enlazada por referencia Otro uso es en la senalizacion de errores Un programa en un sistema operativo Unix por ejemplo podria no querer terminar inmediatamente cuando recibe un SIGTERM para tomar los recaudos necesarios una funcion de retrollamada podria efectuar una limpieza Tambien puede utilizarse para controlar si una funcion actua o no Xlib permite predicados personalizables a especificarse para determinar si un programa desea manipular un evento El siguiente codigo en C demuestra el uso de funciones de retrollamada para mostrar dos numeros include lt stdio h gt include lt stdlib h gt La funcion de llamada toma una simple retrollamada como un parametro void ImprimirDosNumeros int numeroEntrada void printf d y d n numeroEntrada numeroEntrada Una posible retrollamada int unaRetrollamada void return rand 1000 9001 Otra posible retrollamada int otraRetrollamada void return 42 El programa principal llama a ImprimrDosNumeros con tres retrollamadas diferentes int main void ImprimirDosNumeros amp rand ImprimirDosNumeros amp unaRetrollamada ImprimirDosNumeros amp otraRetrollamada return 0 Este ejemplo daria una salida en consola similar a 125185 y 89188225 9084 y 9441 42 y 42Referencias EditarEnlaces externos EditarStyle 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 Datos Q1205349Obtenido de https es wikipedia org w index php title Callback informatica amp oldid 127617832, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos