Differenze tra le versioni di "Usare una Classe come fosse una Funzione"
Da Gambas-it.org - Wikipedia.
(Creata pagina con " == Descrizione: == Per usare una classe oppure un oggetto alla stregua di una funzione ci avvarremo del metodo speciale [http://gambaswiki.org/wiki/lang/special/call?l=it '...") |
|||
Riga 5: | Riga 5: | ||
Per usare una classe oppure un oggetto alla stregua di una funzione ci avvarremo del metodo speciale [http://gambaswiki.org/wiki/lang/special/call?l=it '_call()'] che serve appunto a tale scopo. | Per usare una classe oppure un oggetto alla stregua di una funzione ci avvarremo del metodo speciale [http://gambaswiki.org/wiki/lang/special/call?l=it '_call()'] che serve appunto a tale scopo. | ||
− | Esemplificheremo il tutto creando una classe '''CMat''' preposta a restituire il risultato di un'operazione matematica. | + | Esemplificheremo il tutto creando una classe '''CMat''' preposta a restituire il risultato di un'operazione matematica, il cui funzionamento è talmente semplice da rendere superflua ogni ulteriore spiegazione. |
La routine chiamante ''istanzierà'' un nuovo oggetto e invierà al metodo ''_call()'' le istruzioni atte a riceverne il corretto risultato di ritorno. | La routine chiamante ''istanzierà'' un nuovo oggetto e invierà al metodo ''_call()'' le istruzioni atte a riceverne il corretto risultato di ritorno. | ||
+ | |||
+ | Sfrutteremo anche la parola chiave ''''...'''', [https://www.gambas-it.org/wiki/index.php?title=Passare_a_una_funzione_un_numero_imprecisato_di_argomenti qui] meglio descritta che permette di passare un numero imprecisato di argomenti. | ||
== Il modulo Main.module chiamante: == | == Il modulo Main.module chiamante: == |
Versione delle 15:52, 11 gen 2021
Descrizione:
Per usare una classe oppure un oggetto alla stregua di una funzione ci avvarremo del metodo speciale '_call()' che serve appunto a tale scopo.
Esemplificheremo il tutto creando una classe CMat preposta a restituire il risultato di un'operazione matematica, il cui funzionamento è talmente semplice da rendere superflua ogni ulteriore spiegazione.
La routine chiamante istanzierà un nuovo oggetto e invierà al metodo _call() le istruzioni atte a riceverne il corretto risultato di ritorno.
Sfrutteremo anche la parola chiave '...', qui meglio descritta che permette di passare un numero imprecisato di argomenti.
Il modulo Main.module chiamante:
Public Sub Main() Dim Operazione As New CMat With Operazione Print Operazione(.Somma, 1.2, 2.0, 3.55, 4.0, 5.12) Print Operazione(.Sottrazione, 12345, 45, 67, 890, 543, 987, 345, 1234, 4567) Print Operazione(.Moltiplicazione, 32, 64, 12, 21) Print Operazione(.Divisione, 1234, 56, 78, 93, 4) End With End
La classe funzione CMat:
Public Enum Somma, Sottrazione, Moltiplicazione, Divisione Public Sub _call(Operator As Integer, ...) As Variant Dim v As Variant = Param.All Dim i, iType As Integer Dim vResult As Variant = 0 If Param.Count = 0 Then Return iType = TypeOf(v[0]) If iType = 4 Then CLong(vResult) Else If iType = 7 Then CFloat(vResult) Else Message.Warning("Occorre inserire dei numeri") Return Endif For i = 0 To Param.Max If TypeOf(v[i]) <> iType Then Message.Warning("Impossibile operare su tipi di dato diversi") Return Endif Next Select Case Operator Case Somma For i = 0 To Param.Max vResult += v[i] Next Return vResult Case Sottrazione vResult = v[0] For i = 1 To Param.Max vResult -= v[i] Next Return vResult Case Moltiplicazione vResult = v[0] For i = 1 To Param.Max vResult *= v[i] Next Return vResult Case Divisione vResult = v[0] For i = 1 To Param.Max Try vResult /= v[i] If Error Then Message.Error(Error.Text) Return Endif Next Return vResult End Select End