Differenze tra le versioni di "Gestire Funzioni come oggetti"

Da Gambas-it.org - Wikipedia.
Riga 35: Riga 35:
 
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.
 
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, o in un Modulo, possono essere chiamate anche mediante il metodo ''Object.Call()''. In tal caso non si utilizzerà il metodo speciale ''_call()'' .
+
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.
 
Mostriamo un esempio, nel quale si avrà un applicativo composto anche da un Modulo e da una Classe specifica, ciascuno contenente una funzione.
Riga 87: Riga 87:
 
     Print s; i
 
     Print s; i
 
   
 
   
   
+
  <FONT Color=gray>' ''Chiamata di Funzione qui con il metodo "Object.Call()":''</font>
 
     Object.Call(obCl, "ClSub", Null)
 
     Object.Call(obCl, "ClSub", Null)
 
      
 
      
 
  '''End'''
 
  '''End'''

Versione delle 01:39, 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 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