• Sábado 14 de Diciembre de 2024, 20:43

Autor Tema:  Callback  (Leído 3738 veces)

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Callback
« en: Miércoles 9 de Mayo de 2007, 01:59 »
0
Hola, queria saber que son las funciones callback, pero lo que encontre en google esta todo en ingles. Alguien me puede explicar que son?, por lo que vi estan relacionadas con los punteros a funciones.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Callback
« Respuesta #1 en: Miércoles 9 de Mayo de 2007, 02:18 »
0
Wikipedia inglesa parece ser clara.

Cita de: "en.wikipedia.org"
In computer programming, a callback is executable code that is passed as an argument to other code. It allows a lower-level software layer to call a subroutine (or function) defined in a higher-level layer.

"En programacion, un callback es el codigo ejecutable que es pasado como argumento a otro codigo. Esto permite una llamada de software de bajo nivel llame a una subrutina (o funcion) definida en una capa de alto nivel",

Entonces un callback es una parte de codigo que puede ser usada una y otra vez (segun entiendo).
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Callback
« Respuesta #2 en: Miércoles 9 de Mayo de 2007, 02:22 »
0
algun ejemplo claro como para entenderlo?

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Callback
« Respuesta #3 en: Miércoles 9 de Mayo de 2007, 03:04 »
0
Cita de: "AnioN"
algun ejemplo claro como para entenderlo?
Con 100% de seguridad no, pero intentandolo...

Código: Text
  1. funcion tal
  2. {
  3.   printf ...
  4. }
  5.  
  6. for (0..1000){tal("Hola!")}
  7.  
  8.  

Como se puede ver, tal es llamada por el bucle (for) una y otra vez.

Bueno, eso fue lo que entendi por callback  :rolleyes:

Je, je, una mas facil de entender en Perl:

Código: Text
  1. sub fibonacci { #sub funcion
  2.   my $n = abs(shift); #Toma los argumentos mandados a la sun funcion;
  3.   return $n if ($n == 0 or $n == 1);
  4.   return fibonacci($n-1) + fibonacci($n-2);
  5. }
  6. fibonacci(10); #pasamos 10 a la funcion
  7.  
  8.  

Como se ve, la funcion se define a si misma, se re-llama para dar el resultado.

Matematicamente se llama sucesion (en este caso) y es algo como esto:

*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Callback
« Respuesta #4 en: Miércoles 9 de Mayo de 2007, 04:51 »
0
Lo que ha explicado su*, si le entendí bien es recurrencia.

Un callback es lo que los des arrolladores modernos ( de la era del CLR  :devil: ) le llaman un delegado, y es la opción de poder enviar como parámetro o como retorno de una función un puntero a otra función (en realidad un puntero a otro bloque de código ejecutable) dicho callback puede estar previamente definido indicando la estructura y parámetros de entrada del delegado pasado como parámetro o bien del delegado devuelto.

En fin no se si fue claro, aca un ejemplo sacado de wikipedia:
Código: Text
  1.  
  2. /* LIBRARY CODE */
  3. int traverseWith(int array[], size_t length,
  4.                  int (*callback)(int index, int item, void *param),
  5.                  void *param)
  6. {
  7.     int exitCode = 0;
  8.     for (int i = 0; i < length; i++) {
  9.         exitCode = callback(i, array[i], param);
  10.         if (exitCode) {
  11.             break;
  12.         }
  13.     }
  14.     return exitCode;
  15. }
  16.  
  17. /* APPLICATION CODE */
  18. int search (int index, int item, void *param)
  19. {
  20.     if (item > 5) {
  21.         *(int *)param = index;
  22.         return 1;
  23.     } else {
  24.         return 0;
  25.     }
  26. }
  27.  
  28. /* (in another function) */
  29. int index;
  30. int found;
  31. found = traverseWith(array, length, search, &index);
  32. if (found) {
  33.     printf("Item %d\n", index);
  34. } else {
  35.     printf("Not found\n");
  36. }
  37.  

Y aca un articulo al respecto tomado de msdn donde indica la diferencia entre un delegado y un puntero a una funcion :

http://msdn.microsoft.com/library/spa/defa...f__delegate.asp

Otros importantes de revisar al respecto de callbacks y delegados:

http://www.codeproject.com/cpp/FastDelegate.asp
http://msdn2.microsoft.com/en-us/library/3...ye0(VS.80).aspx
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Callback
« Respuesta #5 en: Miércoles 9 de Mayo de 2007, 05:21 »
0
Una funcion callback es una función que será llamada posteriormente por un ente externo al código principal (el sistema operativo, una dll o lo que sea), esto qué quiere decir? bueno, básicamente es una función que es definida pero nunca es llamada en forma directa sinó a travez de un intermediario (lo que mensioné anteriormente), un ejemplo simple de esto lo ves cuando programás en windows con el entorno de ventanas... cada ventana tendrá su función callback en la que definiremos el comportamiento de la misma, pero esta función no es llamada en forma directa por nosotros sinó por el sistema operativo cuando se produce algún evento que la involucre...  :kicking:

S2

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Callback
« Respuesta #6 en: Miércoles 9 de Mayo de 2007, 14:05 »
0
entiendo la explicacion de los 2 ultimos post, pero distan un poco cada una. Alguna otra opinion?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Callback
« Respuesta #7 en: Miércoles 9 de Mayo de 2007, 14:40 »
0
Aca, como correctamente dijo su-, esta muy bien explicado:

http://en.wikipedia.org/wiki/Callback_(computer_science)

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Callback
« Respuesta #8 en: Miércoles 9 de Mayo de 2007, 16:24 »
0
Un ejemplo aún más claro??? haber... vos creás una DLL para monitorear el acceso a un determinado recurso, o para procesar determinado tipo de mensajes... supongamos acceso a internet (es el único que se me ocurre), el tema es que no queres estar preguntando todo el tiempo si un determinado usuario está intentando conectarce (por eso el uso de una DLL), pero no queres establecer el comportamiento (que hacer si fulanito se conecta) en la DLL, sinó en tu programa principal que tendrá un conjunto de factores para determinar que hacer.... veamoslo de otra forma:

Programa principal           <--------------->            DLL

La única forma (o mejor dicho, la mejor forma) de que tu programa pueda realizar esto es mediante una función CallBack, supongamos lo siguiente:

Código principal:
Código: Text
  1.  
  2. ....
  3. int Anteconexion(type arg1,type arg2,...,type argn){
  4. //aquí vendría la implementación para cada caso...
  5. }
  6. ...
  7.  
  8.  

y en alguna parte del código:

Código: Text
  1.  
  2.    determinarcbf(&Anteconexion);
  3.  
  4.  

donde determinarcbf() sería una función de la DLL que permitiría la vinculación de ambos procesos...

Dentro de la DLL

Código: Text
  1.  
  2.    if(ConnectionQuery)//func. invent. que detectaría si un usuario quiere conectarce
  3.       pAnteconexion(arg1,arg2,...,argn);
  4.  
  5.  

como verás, en la dll se llama al puntero enviado por el programa principal que será quien decida que hacer, incluso la DLL podría tener en cuenta el valor retornado por la función pAnteconexion() y permitir o denegar la conexión...

La principal ventaja de todo esto es la de poder definir una gama de comportamientos para distintos programas (si la DLL es utilizada por más de uno), en lo que es el entorno Windows es muy común, como te dije, la posibilidad de definir el compotamiento de cada ventana es lo más común... espero esta vez logres entenderlo...

S2

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Callback
« Respuesta #9 en: Miércoles 9 de Mayo de 2007, 16:31 »
0
ha... me olvidaba decir que no es la única forma de usarlo con DLL's o procesos externos... pero es la que tiene más aplicación práctica... ya que si la función se encuentra dentro del código principal... no haría falta llamarla de esta forma... y un poco fuera de esto, tb suele usarse con programación orientada a objetos para redireccionar una llamada a un determinado objeto... pero esa parte ya es bastante más complicada... je

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Callback
« Respuesta #10 en: Miércoles 9 de Mayo de 2007, 16:47 »
0
Muchas Gracias. Ahora si me quedo claro. :D

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Callback
« Respuesta #11 en: Miércoles 9 de Mayo de 2007, 19:08 »
0
Cita de: "Eternal Idol"
Aca, como correctamente dijo su-, esta muy bien explicado:

http://en.wikipedia.org/wiki/Callback_(computer_science)
En Wiki esta bien explicado, pero el ejemplo de su- esta errado.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Callback
« Respuesta #12 en: Miércoles 9 de Mayo de 2007, 19:15 »
0
Cita de: "JuanK"
En Wiki esta bien explicado, pero el ejemplo de su- esta errado.
¿Alguien dijo lo contrario? Mejor concentrate en no responder con cosas que no tengan que ver a este subforo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Callback
« Respuesta #13 en: Miércoles 9 de Mayo de 2007, 23:39 »
0
Cita de: "JuanK"
Cita de: "Eternal Idol"
Aca, como correctamente dijo su-, esta muy bien explicado:

http://en.wikipedia.org/wiki/Callback_(computer_science)
En Wiki esta bien explicado, pero el ejemplo de su- esta errado.
 :( Eso me pasa por no leer el segundo parrafo: Bien dice "pointer or handle".

Si quiera que dije "Con 100% de seguridad no, pero intentandolo..."
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.