Differenze tra le versioni di "Gestire Funzioni come oggetti"

Da Gambas-it.org - Wikipedia.
Riga 5: Riga 5:
 
Si tratta di assegnare il nome identificativo della ''Funzione'' o della ''Procedura'' ad una variabile di tipo ''Oggetto'', con la quale effettuare la chiamata con il metodo ''Object.Clall()'' .
 
Si tratta di assegnare il nome identificativo della ''Funzione'' o della ''Procedura'' ad una variabile di tipo ''Oggetto'', con la quale effettuare la chiamata con il metodo ''Object.Clall()'' .
  
Mostriamo un semplice esempio:
+
====Esempio in ambiente grafico====
 +
Mostriamo un semplice esempio con applicazione in ambiente ''grafico''.
 +
'''Public''' Sub Form_Open()
 +
 
 +
  Dim i As Integer
 +
  Dim ob As Object
 +
   
 +
  ob = FMain  <FONT Color=gray>' ''E' possibile usare anche "Me" anziché FMain''</font>
 +
 
 +
  i = Object.Call(ob, "Somma", [3, 4])
 +
 +
  Print i
 +
 
 +
'''End'''
 +
 +
 +
'''Public''' Function Somma(a As Integer, b As Integer) As Integer  <FONT Color=gray>' ''<--- La Funzione deve essere dichiarata come "Pubblica"''</font>
 +
 
 +
  Dim i As Integer
 +
 
 +
  i = a + b
 +
 
 +
  Return i
 +
 
 +
'''End'''
 +
 
 +
 
 +
====Esempio con applicazione ''a riga di comando''====
 +
Mostriamo un semplice esempio con applicazione''a riga di comando'':
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
Riga 11: Riga 39:
 
   Dim ob As Object
 
   Dim ob As Object
 
      
 
      
   ob = MMAin
+
   ob = Me
 
    
 
    
 
   i = Object.Call(ob, "Somma", [3, 4])
 
   i = Object.Call(ob, "Somma", [3, 4])

Versione delle 11:50, 27 mar 2016

Funzioni e Procedure, presenti in Moduli o in Classi specifiche, possono essere gestite e chiamate come oggetti, siano esse interne alla medesima Classe (o Modulo) di quella della funzione chiamante, oppure poste in una Classe (o Modulo) diversa da quella della funzione chiamante.


Funzioni e Procedure poste all'interno della medesima Classe o Modulo della funzione chiamante

Si tratta di assegnare il nome identificativo della Funzione o della Procedura ad una variabile di tipo Oggetto, con la quale effettuare la chiamata con il metodo Object.Clall() .

Esempio in ambiente grafico

Mostriamo un semplice esempio con applicazione in ambiente grafico.

Public Sub Form_Open()
 
 Dim i As Integer
 Dim ob As Object
   
  ob = FMain   ' E' possibile usare anche "Me" anziché FMain
  
  i = Object.Call(ob, "Somma", [3, 4])

  Print i
  
End


Public Function Somma(a As Integer, b As Integer) As Integer   ' <--- La Funzione deve essere dichiarata come "Pubblica"
  
 Dim i As Integer
 
  i = a + b
 
  Return i
 
End


Esempio con applicazione a riga di comando

Mostriamo un semplice esempio con applicazionea riga di comando:

Public Sub Main()
 
 Dim i As Integer
 Dim ob As Object
   
  ob = Me
  
  i = Object.Call(ob, "Somma", [3, 4])

  Print i
  
End


Public Function Somma(a As Integer, b As Integer) As Integer   ' <--- La Funzione deve essere dichiarata come "Pubblica"
  
 Dim i As Integer
 
  i = a + b
 
  Return i
 
End


Funzioni e Procedure poste in altra Classe o Modulo

Il Modulo o la Classe specifica deve avere, come intestazione, la parola chiave "Create". Inoltre, le Funzioni e le Procedure, presenti in Moduli o in Classi specifiche, saranno rappresentate dal metodo speciale _call(), che viene appunto dichiarato quando l'oggetto è usato come una funzione.

Le Funzioni e Procedure presenti in una Classe specifica possono essere chiamate anche mediante il metodo Object.Call(). In tal caso non si utilizzerà il metodo speciale _call() . La chiamata di Funzioni e Procedure possono essere effettuate con il metodo Object.Call() anche se esse sono presenti in un Modulo; ma in tal caso non deve essere presente nel Modulo la parola chiave "Create".

Mostriamo un esempio, nel quale si avrà un applicativo composto anche da un Modulo e da una Classe specifica, ciascuno contenente una funzione.

Il Modulo, che chiamaremo Module1, sarà così scritto:

Create


Public Function _call(i As Integer) As Integer
 
  Return i * 10
 
End


La Classe specifica, che chiameremo Class1, sarà così scritta:

Create


Public Function _call(s As String) As String
 
  Return s & " 10 = "
 
End


Public Procedure ClSub()
 
  Print "Procedura chiamata con 'Object.Call()'"
 
End


Mentre la Classe principale dell'applicativo sarà la seguente:

Public Sub Form_Open()

  Chiamata(Class1, Module1)

End


Public Procedure Chiamata(obCl As Object, obMod As Object)

  Dim i As Integer
  Dim s As String
  
   s = obCl("7 x")
   
   i = obMod(7)
   Print s; i

' Chiamata di Funzione qui con il metodo "Object.Call()":
   Object.Call(obCl, "ClSub", Null)
   
End