Differenze tra le versioni di "Gestire Funzioni come oggetti"

Da Gambas-it.org - Wikipedia.
(Creata pagina con '''Funzioni'' e ''Procedure'', presenti in Moduli o in Classi specifiche, possono essere gestite e chiamate come ''oggetti'', siano esse interne ad una medesima ''Classe'' o ''...')
 
Riga 1: Riga 1:
''Funzioni'' e ''Procedure'', presenti in Moduli o in Classi specifiche, possono essere gestite e chiamate come ''oggetti'', siano esse interne ad una medesima ''Classe'' o ''Modulo'', oppure poste in altra ''Classe'' o ''Modulo'' rispetto a quella della funzione chiamante.
+
''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.
  
  

Versione delle 02:17, 14 lug 2015

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() .

Mostriamo un semplice esempio:

Public Sub Main()
 
 Dim i As Integer
 Dim ob As Object
   
  ob = MMAin
  
  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 sub-routine presenti in una Classe specifica possono essere chiamate anche mediante il metodo Object.Call(). In tal caso non si utilizzerà il metodo speciale _call() .


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


   Object.Call(obCl, "ClSub", Null)
   
End