Foros del Web » Programando para Internet » Javascript »

funciones callbacks ?

Estas en el tema de funciones callbacks ? en el foro de Javascript en Foros del Web. Buenas, Quisiera saber que aporta hacer las funciones de esta forma? Tengo algo de información, pero quiero vuestra info @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver ...
  #1 (permalink)  
Antiguo 14/05/2014, 06:01
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
funciones callbacks ?

Buenas,

Quisiera saber que aporta hacer las funciones de esta forma?

Tengo algo de información, pero quiero vuestra info

Código Javascript:
Ver original
  1. square = function(x) {
  2.   return x * x;
  3. };
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #2 (permalink)  
Antiguo 14/05/2014, 07:03
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: funciones callbacks ?

Amigo:

Se llaman "funciones anonimas", tambien existen en PHP por ejemplo desde las ultimas versiones y es una forma muy usada en lenguajes de "programacion funcional"

Se usan cuando se quiere hacer algo puntual y porque permiten hacer otras cosas interesantes como:

reduce() similar al reduce() de Python o al array_reduce() de PHP,
map() similar al map() de Python o al array_map() en PHP.
etc ..

Esta forma de programacion es propia de lenguajes como Haskell pero la encuentras en PHP 5.3+, C++, C#, JavaScript,...


https://developer.mozilla.org/en-US/...s/Array/Reduce
https://developer.mozilla.org/en-US/...al_Objects/Map
__________________
Salu2!

Última edición por Italico76; 14/05/2014 a las 07:19
  #3 (permalink)  
Antiguo 14/05/2014, 07:58
Avatar de jp91  
Fecha de Ingreso: mayo-2014
Mensajes: 94
Antigüedad: 10 años
Puntos: 11
Respuesta: funciones callbacks ?

El hecho que le coloques nombre a una funcion puede ser para identificarla, poder ver en la consola de errores cuando es llamada. Pero tambien existen esta funciones que son anonimas.
Código Javascript:
Ver original
  1. var square = function(x) {
  2. //parametros son tomados como variables dentro de la funcion
  3.   return x * x;
  4. };
  5. square(4)//16
Esto es una funcion objeto creada con una funcion literal y tienen una union al contexto de afuera en pocas palabras esto es llamado "closure" una gran herremienta;
__________________
OOoo Como hacer ooOO
juegos con Html5.
  #4 (permalink)  
Antiguo 14/05/2014, 12:31
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: funciones callbacks ?

Perfecto!

Las conozco por Symfony 2. Sin embargo, no acabo de entender al 100% su potencial,

Un saludo!!!!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #5 (permalink)  
Antiguo 14/05/2014, 14:08
Avatar de jp91  
Fecha de Ingreso: mayo-2014
Mensajes: 94
Antigüedad: 10 años
Puntos: 11
Respuesta: funciones callbacks ?

jjejeje otro ejemplo de closure:
Código Javascript:
Ver original
  1. var algo = function (parametro) {
  2. return {
  3. obtener: function ( ) {
  4. return parametro;
  5. }
  6. };
  7. };
  8. // hacemos uan instancia
  9. var otroAlgo = algo("genial");
  10. //llamamos al metodo
  11. otroAlgo.obtener();//genial

si te has percatado sin necesidad de usar "new" la variable otroAlgo puede acceder a la propiedad de la variable algo, esto es posible porque esa funcion retorna un objeto y es almacenada en la otra variable.
__________________
OOoo Como hacer ooOO
juegos con Html5.
  #6 (permalink)  
Antiguo 14/05/2014, 15:21
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: funciones callbacks ?

@jp91 : ese ejemplo tiene un problemita... y es que no es una clase como quisieras que fuera pero sirve para ver una caracteristica importante de las funciones anonimas en JavaScript que es el "memorizar" sus variables locales aun cuando la funcion finaliza.
__________________
Salu2!

Última edición por Italico76; 14/05/2014 a las 15:43
  #7 (permalink)  
Antiguo 14/05/2014, 16:45
Avatar de jp91  
Fecha de Ingreso: mayo-2014
Mensajes: 94
Antigüedad: 10 años
Puntos: 11
Respuesta: funciones callbacks ?

jejje exacto no es ningun tipo de clase, mmm no estoy apegado a ese tipo de paradigma , aunque claro es muy util, partiendo claro que en javascript no hay clases y que la palabra "new" se adapto a javascript solo para hacerlo un poco parecido a su contricante, porque en su tiempo java era muy popular. Saludos
__________________
OOoo Como hacer ooOO
juegos con Html5.
  #8 (permalink)  
Antiguo 14/05/2014, 17:21
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: funciones callbacks ?

@jp91 : pues aca mi intento jejeje

Código Javascript:
Ver original
  1. <script language="JavaScript">
  2.    
  3.     // funcion "polimorfica"
  4.     var saludar =  function (nombre, lang )
  5.                 {                          
  6.                     lang = lang || 'es';                   
  7.                    
  8.                     if (lang.lenght >2)
  9.                         return null;
  10.                                        
  11.                     saludar_es = function ( )
  12.                     {
  13.                             return('Hola '+nombre);
  14.                     };
  15.                            
  16.                     saludar_en = function ( )
  17.                     {
  18.                             return('Hi '+nombre);
  19.                     }; 
  20.                        
  21.                     saludar_it = function ( )
  22.                     {
  23.                             return('Ciao '+nombre);
  24.                     };     
  25.                        
  26.                     return eval('saludar_'+lang+'()');
  27.                 };
  28.                
  29.                
  30.     // hacemos una instancia
  31.     var saludo = saludar("Juan",'it');
  32.    
  33.     console.log(saludo);  // Ciao Juan
  34.    
  35.     </script>

Uso closures para "sobrecargar" la funcion saludar (aunque tecnicamente no si es exacto)
__________________
Salu2!
  #9 (permalink)  
Antiguo 14/05/2014, 17:38
Avatar de jp91  
Fecha de Ingreso: mayo-2014
Mensajes: 94
Antigüedad: 10 años
Puntos: 11
Respuesta: funciones callbacks ?

jejejeje genial, le quitaria ese eval, y hiciera un metodo para obtener el idioma, digamos
saludar.enEspañol("juan") jjj solo lo haria por hobbies mios.
__________________
OOoo Como hacer ooOO
juegos con Html5.
  #10 (permalink)  
Antiguo 14/05/2014, 20:31
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: funciones callbacks ?

Que payasada la mia!!! en fin... no habia leido sobre prototipos y estaba jugando ...

En fin.. esto es mas util para clarificar el poder de "memorizacion" de los closures:

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.     /*
  3.         Capacidad de memorizacion de variables locales de closures
  4.        
  5.         @author: Pablo Bozzolo (italico76)
  6.    
  7.     */
  8.  
  9.     f = function(){
  10.         if (typeof contador == "undefined"){
  11.             contador=1;
  12.             console.log('Hi, this is the '+contador+'st you\'ve visted me');
  13.         }else{
  14.             contador++         
  15.             console.log('Hi, this is the '+contador+'nd you\'ve visted me');
  16.         }  
  17.        
  18.        
  19.     };
  20.  
  21.     f();
  22.     f();
  23.     f();
  24.  
  25. </script>


Imprime en la consola:

Cita:
Hi, this is the 1st you've visted me
Hi, this is the 2nd you've visted me
Hi, this is the 3nd you've visted me
__________________
Salu2!

Última edición por Italico76; 14/05/2014 a las 20:38
  #11 (permalink)  
Antiguo 15/05/2014, 04:25
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: funciones callbacks ?

Cita:
Iniciado por Italico76 Ver Mensaje
Que payasada la mia!!! en fin... no habia leido sobre prototipos y estaba jugando ...

En fin.. esto es mas util para clarificar el poder de "memorizacion" de los closures:
En ese código no hay ningún closure, al menos en su definición usual.
La variable "contador" no es una variable local.Es una variable global.
Se puede argumentar que, estrictamente hablando, el acceso a una variable global se resuelve a través del closure de la función con respecto al ámbito global, pero no es la definición "normal" de closure.
  #12 (permalink)  
Antiguo 15/05/2014, 05:04
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: funciones callbacks ?

Cita:
Iniciado por dashtrash Ver Mensaje
En ese código no hay ningún closure, al menos en su definición usual.
La variable "contador" no es una variable local.Es una variable global.
Se puede argumentar que, estrictamente hablando, el acceso a una variable global se resuelve a través del closure de la función con respecto al ámbito global, pero no es la definición "normal" de closure.
Estoy complicado...... no logro hacer local a la variable, pero si se puede ? una mano ?

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.     f = function(){
  3.         if (typeof this.contador == "undefined"){
  4.             this.contador=1;
  5.             console.log('Hi, this is the '+this.contador+'st you\'ve visted me');
  6.         }else{
  7.             this.contador++        
  8.             console.log('Hi, this is the '+this.contador+'nd you\'ve visted me');
  9.         }          
  10.     };
  11.  
  12.     f();
  13.     f();
  14.     f();
  15.  
  16. </script>

Y gracias por tu correccion......me ayuda ser mejor ;)
__________________
Salu2!

Última edición por Italico76; 15/05/2014 a las 05:36
  #13 (permalink)  
Antiguo 15/05/2014, 06:37
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: funciones callbacks ?

En el código anterior, no puedes usar this, ya que no tienes un objeto función al que aplicarlo (no se ha hecho "new").
Más o menos, lo que quieres hacer es:
Código Javascript:
Ver original
  1. var q=(
  2.         function()
  3.        {
  4.                var contador=0; // Variable local a la funcion autoejecutable.
  5.                return function(){console.log(contador);contador++;};
  6.        })();
  7. q();
  8. q();
  9. q();

Esta construccion es muy interesante, por otro motivo.Este código:
Código Javascript:
Ver original
  1. var MyClass=(function(){
  2.         var contador=0;
  3.         function privateMethod(){
  4.              console.debug("called private:"+contador);
  5.               contador++;
  6.          };
  7.          return function()
  8.          {
  9.                 this.callPrivate=function(){privateMethod();};
  10.           };
  11.     })();
  12.  
  13. var instance=new MyClass();
  14. instance.callPrivate(); // escribe en consola : called private 0
  15. instance.callPrivate(); // escribe en consola : called private 1
  16. instance.callPrivate();  // escribe en consola : called private 2
  17. instance.privateMethod() ; // escribe en consola: TypeError: undefined is not a function
  18. instance.contador; // undefined
Como se ve, el closure y la funcion autoinvocada hace que privateMethod y contador sólo sean accesibles desde dentro de una instancia del objeto funcion retornado por la funcion autoinvocada.Esto es una forma de simular variables y métodos privados en clases javascript.
  #14 (permalink)  
Antiguo 15/05/2014, 07:04
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: funciones callbacks ?

O sea que tiene que haber anidamiento para escapar del ambito global ? esta ahi el chiste ?

Muy buenos ejemplos! gracias!
__________________
Salu2!
  #15 (permalink)  
Antiguo 15/05/2014, 07:47
Avatar de jp91  
Fecha de Ingreso: mayo-2014
Mensajes: 94
Antigüedad: 10 años
Puntos: 11
Respuesta: funciones callbacks ?

Hey @dastrash asi es, en esencia funciones que retornan funciones o funciones que retornan objetos etc, javascript nos ayuda a cambiar un poco de pensamiento como todo es de caraceter publico mucha gente se confunde y ni hablemos del "this", Como las variable en js viven en el ambito que se crean. puedes usar un module pattern.
Código Javascript:
Ver original
  1. var objeto = {
  2. mensaje: (function () {
  3. var accion = "llama a",quien = "Juan";
  4. return accion + " " + quien;
  5. }()),
  6. obtenerMensaje: function () {
  7. return this.mensaje;
  8. }
  9. };
  10. objeto.obtenerMensaje(); // "llama a juan"

Y y con prototipos
Código Javascript:
Ver original
  1. function juguete() {
  2. // private member
  3. var nombre = 'carro';
  4. // public function
  5. this.obtenerNombre = function () {
  6. return nombre;
  7. };
  8. }
  9. juguete.prototype = (function () {
  10. // privacidad
  11. var algo = "google";
  12. // publico
  13. return {
  14. obtenerAlgo: function () {
  15. return algo;
  16. }
  17. };
  18. }());
  19. var otroJuguete = new juguete();
  20. console.log(otroJuguete.obtenerNombre());
  21. console.log(otroJuguete.obtenerAlgo());
__________________
OOoo Como hacer ooOO
juegos con Html5.

Etiquetas: funcion, funciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:25.