Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
¿ Podemos En Basic Pasar Una Función Como Parametro ?
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje ¿ Podemos En Basic Pasar Una Función Como Parametro ? 
 
Hola!.

En algunos lenguajes es posible hacerlo, supongo que en basic no se puede.

Estoy siguiendo ejemplos de un libro de programación, no centrada en ningún lenguaje.
Se que los caminos son muchos para encontrar una solución. Tenéis que centraros en lo
que se pregunta. Aunque choque. Puede chocar ya que nosotros llamaríamos directamente
a la función. No es la idea que pide el enunciado.

Veréis este es el ejemplo en Python. Que pude hacerlo. Como dice el libro, no todos los lenguajes pueden.

Código: [Descargar] [Ocultar] [Seleccionar]
#|/usr/bin/python3

# Paso de una función como parámetro

def suma(x, y):
    return (x + y)

def producto(x, y):
    return (x * y)


def operacion(f, a, b):
    print ('El resultado es: ',f(a,b))

def main():
    operacion(suma,3,4)


if __name__=='__main__': main()
 


Creo que no hay forma. ¿ Cómo vamos a poner la palabra función en la lista de parámetros de un procedimiento ?.
Ademas de Python, supongo que Java podrá hacerlo. No tengo ni idea si Pascal o C podrá hacer eso.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Podemos En Basic Pasar Una Función Como Parametro ? 
 
Shell escribió: [Ver mensaje]
¿ Podemos En Basic Pasar Una Función Como Parametro ?

Esta circunstancia se concreta, pasando un Puntero que apunta a una función del projecto gambas, cuando una función externa contempla la llamada de una función Callbacks:
http://gambaswiki.org/wiki/lang/extdecl
http://www.gambas-it.org/wiki/index...nterna_Callback


En este foro escribí un tema y un codigo:
    http://foro.gambas-es.org/show_post.php?p=23301
donde se pasaba a una otra función interna de gambas el Puntero simplemente a la area de memoria de una función. En este caso, pero, es posible sólo utilizar la area de memoria como lugar de almacenamiento de datos.
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Podemos En Basic Pasar Una Función Como Parametro ? 
 
Hola!.

He usado un poco de POO. Aunque el código debería ser un poco menos publico los procesos y funciones..
Y hay que mejorarlo un poco.  

- He creado una clase Función.
- Luego he creado dos clases que heredan de Función. clsSuma y clsProducto

Clase Función.
Código: [Descargar] [Ocultar] [Seleccionar]
Public Function Operacion(x As Integer, y As Integer) As String
  
  Return Me.Calcular(x, y)
  
End

Public Function Calcular(op1 As Integer, op2 As Integer) As String
  
End
 


clsProducto

Código: [Descargar] [Ocultar] [Seleccionar]
Inherits ClaseFuncion

Public Function Calcular(op1 As Integer, op2 As Integer) As String
  
  Return "El resultado es: " & (op1 * op2)
  
End
 


clsSuma

Código: [Descargar] [Ocultar] [Seleccionar]
Inherits ClaseFuncion

Public Function Calcular(op1 As Integer, op2 As Integer) As String  
  
  Return "El resultado es: " & (op1 + op2)
  
End
 


Código principal:

Código: [Descargar] [Ocultar] [Seleccionar]
Public Sub Main()
  
  Dim suma As New ClsSuma
  Dim producto As New ClsProducto
    
  Operacion(producto, 3, 4)  
  
End

Public Sub Operacion(opera As ClaseFuncion, a As Integer, b As Integer) As String
  
  Print opera.Operacion(a, b)
  
End
 


Y aquí el resultado de la consola:
Citar:

El resultado es: 12


Aquí tenéis el código para verlo, cambiarlo, mejorarlo...
No me gusta que se vean los dos métodos. No he usado propiedades, aun.

Saludos

Funcion_como_parametro2.tar.gz
Descripción:  
Descargar
Nombre del archivo: Funcion_como_parametro2.tar.gz
Tamaño: 4.93 KB
Descargado: 25 veces
Funcion_como_parametro2.tar.gz
Descripción:  
Descargar
Nombre del archivo: Funcion_como_parametro2.tar.gz
Tamaño: 4.93 KB
Descargado: 25 veces
Funcion_como_parametro2.tar.gz
Descripción:  
Descargar
Nombre del archivo: Funcion_como_parametro2.tar.gz
Tamaño: 4.93 KB
Descargado: 25 veces

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Podemos En Basic Pasar Una Función Como Parametro ? 
 
Sólo deseo añadir la procedura de llamada de una función interna con la Clase Object.

Ejemplo:
Código: [Descargar] [Ocultar] [Seleccionar]
Public Sub Main()

  Dim i As Integer
  Dim ob As Object
    
   ob = MMAin

   i = Object.Call(ob, "suma", [3, 4])
 
   Print i

End


Public Function suma(a As Integer, b As Integer) As Integer   ' <--- Absolutamente obligatorio que sea declarada como "Publica"
  
  Dim i As Integer
  
   i = a + b
  
   Return i
  
End

 



 
última edición por vuott el Martes, 14 Julio 2015, 08:40; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Podemos En Basic Pasar Una Función Como Parametro ? 
 
Vuott:

Interesante. Es mejor asignar Me a ob.

Código: [Descargar] [Ocultar] [Seleccionar]
Public Sub Main()
  
  Dim i As Integer
  Dim ob As Object
  
  'ob = MMain
  ob = Me
  
  i = Object.Call(ob, "suma", [3, 4])
  
  Print i
  
End
 


Creo que esto lo he visto en el ejemplo Painting que incorpora Gambas.
Ya hemos encontrado dos formas de hacerlo, más sencillo y con POO.

A ver si los demás compañeros se anima a comentar.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Podemos En Basic Pasar Una Función Como Parametro ? 
 
Shell escribió: [Ver mensaje]
Es mejor asignar Me a ob.

...por qué ?    


Saludos
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Podemos En Basic Pasar Una Función Como Parametro ? 
 
Citar:

...por qué ?


¿ Qué estas asignado a la variable objeto ob cuando le asignas MMain ?.  


Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Podemos En Basic Pasar Una Función Como Parametro ? 
 
Shell escribió: [Ver mensaje]

¿ Qué estas asignado a la variable objeto ob cuando le asignas MMain ?.  


Sì, mas... porque es mejor ?    
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Podemos En Basic Pasar Una Función Como Parametro ? 
 
vuott escribió: [Ver mensaje]
Shell escribió: [Ver mensaje]

¿ Qué estas asignado a la variable objeto ob cuando le asignas MMain ?.  


Sì, mas... porque es mejor ?    


Es una forma de abreviar en parte. Y además es lo que le estas pasando, "el objeto actual". MMain, que es Me.
Me es todo el modulo, o el objeto MMain. Me es la referencia del objeto MMain.

 me

Para terminar tú código:

Código: [Descargar] [Ocultar] [Seleccionar]
Public Sub Main()
  
  Dim i As Integer
  Dim ob As Object
  
  ob = Me
  
  
  i = Object.Call(ob, "suma", [3, 4])  
  Print i
  
  i = Object.Call(ob, "producto", [3, 4])
  Print i
  
End

Public Function suma(a As Integer, b As Integer) As Integer   ' <--- Absolutamente obligatorio que sea declarada como "Publica"
  
  Dim i As Integer
  
  i = a + b
  
  Return i
  
End

Public Function producto(a As Integer, b As Integer) As Integer   ' <--- Absolutamente obligatorio que sea declarada como "Publica"
  
  Dim i As Integer
  
  i = a * b
  
  Return i
  
End
 


No vayas deprisa que te equivocas. Habías nombrado suma, pero luego hiciste un producto. Ya sé que es temprano.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Podemos En Basic Pasar Una Función Como Parametro ? 
 
Otra manera (utilizo el Me de Shell): con el metodo especial "_call()".

Código: [Descargar] [Ocultar] [Seleccionar]
Public Sub Main()

  Dim b As Byte

    b = Me(2)
  
    Print b

End


Public Function _call(a As Byte) As Byte
  
  Return a * 10
  
End

....no es muy coherente con el asunto de este tema.    
 



 
última edición por vuott el Martes, 14 Julio 2015, 09:54; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Como Pasar Un Parametro A Java Para Genera... jcontasti General 1 Martes, 26 Octobre 2010, 17:09 Ver último mensaje
soplo
No hay nuevos mensajes ¿ Es Posible Pasar Una Función Como ParÃ... Shell General 13 Domingo, 27 Marzo 2016, 19:38 Ver último mensaje
Shell
No hay nuevos mensajes Pasar Un Parámetro Concreto De Varios A U... Shell General 6 Martes, 03 Enero 2017, 22:34 Ver último mensaje
Shell
No hay nuevos mensajes Mismo Result Como Parametro De Varias Clases gambafeliz General 13 Jueves, 29 Agosto 2019, 18:59 Ver último mensaje
gambafeliz
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron